Java-多线程状态获取异常!
!!!线程状态转换问题!
问题简述:
下面的代码中,B线程被设计为Daemon线程,用来不断获取A线程的运行状态并输出。奇怪的事情出现了!
B线程有一定可能获取到A线程的状态为Blocked!!!这是为什么?好奇,求大佬解答,万分感谢!!!
(大佬可以直接编译并运行下面的代码,多运行几次就会发现我所述的现象。)
import static java.lang.System.in;
import static java.lang.System.out;
import java.util.Scanner;
import java.text.DecimalFormat;
public class Temp{
public static void main(String... args) throws InterruptedException{
//通过Thread调用实现了runnable接口的类所生产的实例
Runnable runnerA = new Runnable(){
public void run(){
int i=10;
while(i-->0){
out.println("runnerA's step:"+i+"\t#"+Thread.currentThread().getState());
}
}
};
Thread threadA = new Thread(runnerA);
//直接继承Thread类
Thread threadB = new Thread(){
public void run(){
int i=200;
while(i-->0){
out.println("runnerB's step:"+i);
out.println("threadB中观察threadA的状态为:"+threadA.getState());
}
}
};
//类似于直接继承Thread类,但方式是通过lambda表达式来设计
new Thread(()->{
int i=20;
while(i-->0) out.println("runnerC's step:"+i);
}).start();
out.println("启动threadA前:"+threadA.getState());
threadA.start();
out.println("启动threadA后:"+threadA.getState());
threadB.setDaemon(true);
threadB.start();
//Thread.sleep(100);
}
}