首页 > 代码库 > 2.线程之状态

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网络延时---->并发

2.线程之状态