个人备忘录,不是分享文章。。
public class 线程状态演示 {
public static void main(String[] args)throws Exception{
showNew();
showRunning();
showBloking();
showWait();
showTimedWait();
showTerminated();
}
public static void showTerminated(){
Thread t = new Thread(()->{});
t.start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
System.out.println(t.getState());
}
public static void showNew(){
System.out.println((new Thread()).getState());
}
public static void showRunning(){
(new Thread(()->{
System.out.println(Thread.currentThread().getState());
})).start();
}
public static void showTimedWait() throws InterruptedException {
Object obj = new Object();
Thread t1 = new Thread(()->{
synchronized (obj){
try {
obj.wait(2000);
} catch (InterruptedException e) {
}
}
});
t1.start();
Thread t2 = new Thread(()->{
synchronized (obj){
try {
Thread.sleep(5000L);
obj.notify();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t2.start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
System.out.println(t1.getState());
}
public static void showWait() throws InterruptedException {
Object obj = new Object();
Thread t1 = new Thread(()->{
synchronized (obj){
try {
obj.wait();
} catch (InterruptedException e) {
}
}
});
t1.start();
Thread t2 = new Thread(()->{
synchronized (obj){
try {
Thread.sleep(5000L);
obj.notify();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t2.start();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
}
System.out.println(t1.getState());
}
public static void showBloking(){
Object obj = new Object();
Thread t1 = new Thread(()->{
synchronized (obj){
try {
Thread.sleep(5000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t1.start();
Thread t2 = new Thread(()->{
try {
Thread.sleep(500L);
} catch (InterruptedException e) {
}
synchronized (obj){
try {
Thread.sleep(5000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
t2.start();
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
}
System.out.println(t2.getState());
}
}