线程基础之挂起与通知
2017-10-01 00:00
155 查看
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 : 执行完毕
从这里可以看出,挂起时,线程将释放锁。
而通知时,并不会释放锁。
相关文章推荐
- 线程基础之挂起与通知
- JavaSE8基础 Thread.currentThread 设置和获取main方法所在线程的优先级
- java线程基础
- JAVA基础知识点(十一)--线程
- C#子线程执行完后通知主线程
- 线程的基础知识
- Java多线程编程基础之线程对象
- java基础学习总结——线程(二)
- 黑马程序员——Java基础—线程
- 【java基础】Java 中的进程与线程
- 1.8.2挂起线程(独占锁)
- linux基础——linux线程间通信及同步机制总结
- java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)
- C#基础:使用Thread创建线程
- 线程的基础知识(ZT)
- java基础线程-wait+notify
- java 线程协作 wait(等待)与 notiy(通知)
- Java 7之多线程第7篇 - 线程锁基础
- C#语言 第六部分 线程(一)线程基础(2)
- java 多线程基础(一)——线程创建及五种状态