• 2.线程之状态


    一、线程的状态有5种:

      新生状态   就绪状态  运行状态  阻塞状态  死亡状态

    二、线程的停止(重点

     1,自然终止:线程体执行完毕
     2,外部干涉:
      1>,线程体类 定义 线程体使用的标识
      2>,线程体中使用该标识
      3>,提供对外的方法改变该标识
      4>,外部根据条件调用该方法

    代码实现:

    package com.cust.status;
    /**
     * 描述:线程的终止:
     *     1,自然终止:线程体执行完毕
     *     2,外部干涉:
     *     	   1>,线程体类 定义 线程体使用的标识
     *         2>,线程体中使用该标识
     *         3>,提供对外的方法改变该标识
     *         4>,外部根据条件调用该方法
     * @author cookie
     */
    public class StopDemo implements Runnable{
    	private boolean flag = true;//定义标识
    	private int num=0;
    	@Override
    	public void run() {
    		while(flag){//使用标识
    			System.out.println("stop--->"+num++);
    		}
    	}
    	public void stop(){	//对外提供改变标识的方法
    		this.flag = false;
    	}
    	public static void main(String[] args) {
    		StopDemo s = new StopDemo();
    		new Thread(s).start();
    		for(int i = 0; i < 100; i++){
    			if(i==50){
    				s.stop();//外部调用
    			}
    			System.out.println("main----->"+i);
    		}
    	}
    }
    

      二、线程的阻塞

    • join:合并线程 c.join(); //等待c先执行
    • yield: static 暂停当前正在执行的线程,先让别的线程执行

           Thread.yield();//谁的内部调用谁暂停

    • sleep: static 睡眠 不释放锁 Thread.sleep();

         与时间相关:倒计时

         模拟网络延时,并发 --->Web12306

    join代码实现(yield类似):

    package com.cust.status;
    /**
     * 描述:线程阻塞
     * join:合并线程 t.join();//先将t执行完毕
     * yield:暂停自己的线程,谁调用谁暂停Thread.yield
     * 
     * @author cookie
     */
    public class JoinDemo extends Thread{
    	@Override
    	public void run() {
    		for (int i = 0; i < 1000; i++) {
    			System.out.println("join---->"+i);
    		}
    	}
    	public static void main(String[] args) throws InterruptedException {
    		JoinDemo demo = new JoinDemo();
    		Thread t = new Thread(demo);
    		t.start();
    		//cpu调度执行
    		for (int i = 0; i <100; i++) {
    			if(50==i){
    				t.join();//main方法阻塞
    			}
    			System.out.println("main---->"+i);
    		}
    		
    	}
    }
    

      sleep倒计时:

    package com.cust.status;
    
    import java.sql.Date;
    import java.text.SimpleDateFormat;
    /**
     * 
     * 描述:倒计时
     * @author cookie
     */
    public class SleepDemo01 {
    	public static void main(String[] args) throws InterruptedException {
    		//当前日期的10秒
    		Date endTime = new Date(System.currentTimeMillis()+1000*10);
    		long end = endTime.getTime();//毫秒数
    		while(true){
    			System.out.println(new SimpleDateFormat("mm:ss").format(endTime));//格式化并输出
    			endTime = new Date(endTime.getTime()-1000);//构建下一秒时间
    			Thread.sleep(1000);//睡眠1秒
    			if((end-10000)>endTime.getTime() ){//10秒以内继续,否则退出
    				break;
    			}
    		}
    	}
    	public static void test1() throws InterruptedException {
    		int num = 10;
    		while(true){
    			System.out.println(num--);
    			Thread.sleep(1000);
    			if(num <=0){
    				break;
    			}
    		}
    		
    	}
    }
    

      sleep网络延时---->并发

  • 相关阅读:
    UVA
    计算几何 点和线
    CTU Open Contest 2017
    2018 Multi-University Training Contest 2
    2018 Multi-University Training Contest 1
    Nordic Collegiate Programming Contest (NCPC) 2016
    The 2016 ACM-ICPC Asia Shenyang Regional Contest
    The 2016 ACM-ICPC Asia Qingdao Regional Contest
    CCPC 2016-2017, Finals
    North American Invitational Programming Contest (NAIPC) 2016
  • 原文地址:https://www.cnblogs.com/blogofcookie/p/5930148.html
Copyright © 2020-2023  润新知