线程基础之挂起与通知
2018-03-19 17:53
197 查看
public class NotifyAndWaitTest extends Thread { private Integer num = 0; private static Boolean lock = false; private void addNum() { num++; } private void soutNum() { System.out.println(Thread.currentThread().getName() + " : " + num); } public static void main(String[] args) { NotifyAndWaitTest notifyAndWaitTest = new NotifyAndWaitTest(); Thread t1 = new Thread(new Runnable() { @Override public void run() { synchronized (lock) { for (int i = 0; i < 5; i++) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } if (i == 2) { lock.notify();// t1通知t2继续执行 System.out.println(Thread.currentThread().getName() + " : " + "通知发出,t2将继续执行"); } notifyAndWaitTest.addNum(); notifyAndWaitTest.soutNum(); } try { lock.wait();// t1挂起 System.out.println(Thread.currentThread().getName() + " : " + "线程准备开始执行"); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + " : " + "执行完毕"); } }, "t1"); Thread t2 = new Thread(new Runnable() { @Override public void run() { synchronized (lock) { try { lock.wait();// t2开始挂起 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " : " + "收到通知开始"); lock.notify();// t2通知t1继续执行 System.out.println(Thread.currentThread().getName() + " : " + "通知发出,t1将继续执行"); System.out.println(Thread.currentThread().getName() + " : " + "执行完毕"); } } }, "t2"); t2.start(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } t1.start(); } }
t1 : 1 t1 : 2 t1 : 通知发出,t2将继续执行 t1 : 3 t1 : 4 t1 : 5 t2 : 收到通知开始 t2 : 通知发出,t1将继续执行 t2 : 执行完毕 t1 : 线程准备开始执行 t1 : 执行完毕
从这里可以看出,挂起时,线程将释放锁。
而通知时,并不会释放锁。
相关文章推荐
- 线程基础之挂起与通知
- C# 线程手册 第二章 .NET 中的线程 线程挂起与恢复
- Java基础多线程之join抢夺CPU执行权直到该线程结束。
- android基础---启动线程更新时间的操作
- linux_c 开发(6-1)多线程程序设计_线程基础
- java基础——进程和线程
- Java基础——线程及并发机制
- Java并发编程札记-(一)基础-02创建线程
- java语言基础(89)——多线程(线程控制)
- windows系统调用 线程 启动与挂起
- Chapter 1 线程基础
- 【Java基础】线程笔记——原子操作:atomic
- 线程初级基础(一)
- 进程和线程的基础知识——Python学习笔记11
- Java并发编程(二)--java线程安全的一些基础
- 黑马程序员——Java基础---线程的另一个总结(8)--Semaphere同步工具,控制线程可用线程
- 第二部分 进程(第2章 线程基础A)
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
- java基础之线程间通信
- 线程恢复和挂起