参考:https://blog.csdn.net/pange1991/article/details/53860651
举例
public static void main(String[] args) throws InterruptedException {
Thread t1=new Thread("t1")
{
@Override
public void run() {
System.out.println("running!");
}
};
Thread t2=new Thread("t2")
{
@Override
public void run() {
while (true)
{
}
}
};
Thread t3=new Thread("t3")
{
@Override
public void run() {
System.out.println("running!");
}
};
Thread t4=new Thread("t4")
{
@Override
public void run() {
synchronized (Test.class)
{
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread t5=new Thread("t5")
{
@Override
public void run() {
try {
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Thread t6=new Thread("t6")
{
@Override
public void run() {
synchronized (Test.class)
{
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
Thread.sleep(500);
System.out.println(t1.getState());//NEW 线程被创建,但没有调用start()
System.out.println(t2.getState());//RUNNABLE t2的run()中有死循环,则它要么正被cpu执行,要么就处于就绪态
System.out.println(t3.getState());//TERMINATED 正常执行结束
System.out.println(t4.getState());//TIMED_WAITING 在sleep
System.out.println(t5.getState());//WAITING t5调用了t2的join(),所以t5要等t2执行完才行
System.out.println(t6.getState());//BLOCKED t6没抢到锁,被阻塞
}
执行结果: