注意点:
1、一个线程从阻塞状态不能直接进入运行状态,而是先进入就绪状态。
2、一个线程死亡之后不能重新开启,重新开启的是一个新的线程

- 新生:new之后就进入了新生状态,每个线程有自己的一个工作空间,这个工作空间跟电脑的主内存交互

2、就绪:调用start方法后进入就绪状态,处于就绪队列中等待被cup调度
进入就绪状态的方式:start方法,阻塞事件解除,yield,JVM算法切换

3、运行:当系统调度到了一个等待中的线程时,这个线程处于运行状态

4、阻塞:
进入阻塞状态的方式:sleep,wait,join,io操作read和write

5、死亡:代码执行完成正常结束、强制中断stop, destroy方法


import java.lang.Thread.State;
/**
* 观察线程的状态
* @author Jack
*
*/
public class AllState{
public static void main(String[] args){
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<5;i++){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("...");
}
});
//观察状态
State state = t.getState();
//NEW
System.out.println(state);
t.start();
//RUNNABLE
state = t.getState();
System.out.println(state);
/*while(state!=Thread.State.TERMINATED){
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
//TIMED_WAITING
state = t.getState();
System.out.println(state);
}*/
while(true){
//活动的线程数
int num = Thread.activeCount();
if(num==1){
break;
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
//TIMED_WAITING
state = t.getState();
System.out.println(state);
}
}
}
1042

被折叠的 条评论
为什么被折叠?



