package threadLife;
/**
* company: www.abc.com
* Author: Administrator
* Create Data: 2019/8/14
*/
public class ThreadState {
public static void main(String[] args) throws InterruptedException {
Object lock = new Object();
Thread t1 = new Thread("多线程1") {
@Override
public void run() {
synchronized (lock) {
try {
//必须以当前线程的同步锁来调用wait方法
//wait之后放弃执行资格,直至被唤醒
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("已被叫醒");
System.out.println("线程1启动。。。");
}
}
};
Thread t2 = new Thread("多线程2") {
@Override
public void run() {
synchronized (lock) {
System.out.println(t1.getState());
lock.notify();
System.out.println("已经叫醒线程1");
System.out.println("线程2启动。。。");
}
}
};
System.out.println(t1.getName() +"---"+ t1.getState());//线程处于NEW状态
t1.start();
Thread.sleep(2000);//此处为了确保线程1加上锁之后再执行线程2
t2.start();//t2线程会经过NEW-->RUNNABLE-->BLOCKING-->RUNNABLE-->TERMINATED
for (int i=0;i<100;i++){
System.out.println(t2.getName() + "---" + t2.getState());//线程2处于BLOCKING状态,将会唤醒线程1
System.out.println(t1.getName() + "---" + t1.getState());//线程1处于WAITING状态
}
}
}