class ThreadState implements Runnable {
public synchronized void waitForAMoment() throws InterruptedException {
wait(500); // wait不会持有锁
}
public synchronized void waitForever() throws InterruptedException {
wait(); // 当前线程永久等待,只能等到其他线程调用notify()或notifyAll()方法才能唤醒
}
public synchronized void nofifyNow() throws InterruptedException {
notify();
}
@Override
public void run() {
try {
this.waitForAMoment();
this.waitForever();
System.out.println("other***" + Thread.currentThread().getState()); // other***RUNNABLE
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Test {
public static void main(String[] args) throws InterruptedException {
ThreadState ts = new ThreadState();
Thread thread = new Thread(ts);
System.out.println("创建新线程:" + thread.getState()); // 创建新线程:NEW
thread.start();
System.out.println("启动线程:" + thread.getState()); // 启动线程:RUNNABLE
Thread.sleep(100);
System.out.println("等待500ms:" + thread.getState()); // 等待500ms:TIMED_WAITING
Thread.sleep(1000);
System.out.println("一直等待:" + thread.getState()); // 一直等待:WAITING
ts.nofifyNow();
System.out.println("唤醒进程:" + thread.getState()); // 唤醒进程:BLOCKED
Thread.sleep(1000); // 新进程被唤醒后,继续向下执行System.out.println("other***" + Thread.currentThread().getState()),此时新线程转为Runnable状态
System.out.println("main***" + Thread.currentThread().getState()); // main***RUNNABLE
System.out.println("进程完结:" + thread.getState()); // 进程完结:TERMINATED
}
}
[小练习] 理解Thread状态
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 这8种学生永远拿不到高分!早看早受益! 下面是一位资深班主任总结了8种成绩提不上去的原因,分别对应8类孩子,如果你...
- 这8种学生永远拿不到高分!早看早受益! 下面是一位资深班主任总结了8种成绩提不上去的原因,分别对应8类孩子,如果你...
- 华为近日清退了一批34岁以上的中年员工,都是程序员,原因很容易想得到,中年人精力和创造力方面弱很多,而稀少的管理岗...