Java wait() 和 notify() 理解
2017-12-20 13:40
435 查看
本文可以结合 Java 关键字 synchronized 总结 一起理解。
wait():交出锁和 CPU 控制权,线程进入阻塞状态,等待 notify() 唤醒;
notify():等线程交出锁(synchronized 代码块执行完毕 / 执行 wait())后,唤醒一个 wait();
notifyAll():等线程交出锁(synchronized 代码块执行完毕 / 执行 wait())后,唤醒所有 wait();
范例代码:
wait():交出锁和 CPU 控制权,线程进入阻塞状态,等待 notify() 唤醒;
notify():等线程交出锁(synchronized 代码块执行完毕 / 执行 wait())后,唤醒一个 wait();
notifyAll():等线程交出锁(synchronized 代码块执行完毕 / 执行 wait())后,唤醒所有 wait();
范例代码:
Integer i = new Integer(4); new Thread(new Runnable() { public void run() { synchronized (i) { System.out.println("1号线程,wait 前"); try { // 交出 i 的对象锁,进入阻塞,等待 notify() 唤醒 i.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("1号线程,wait 后"); } } }).start(); new Thread(new Runnable() { public void run() { synchronized (i) { System.out.println("2号线程,wait 前"); try { // 交出 i 的对象锁,进入阻塞,等待 notify() 唤醒 i.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("2号线程,wait 后"); } } }).start(); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } new Thread(new Runnable() { public void run() { synchronized (i) { System.out.println("3号线程,notify all"); // 线程交出 i 的对象锁(synchronized 代码块执行完毕)后,唤醒所有的 wait() i.notifyAll(); } } }).start();
相关文章推荐
- java wait和notify 简单理解
- 深入理解Java多线程中的wait(),notify()和sleep()
- Java 多线程学习笔记 线程通讯 wait notify notifyAll的理解
- java notify,wait,notifyAll理解和实例(一)
- 深入理解Java多线程中的wait(),notify()和sleep()
- 理解 JAVA线程同步及其中中wait()和notify()简洁例子
- 深入理解Java多线程中的wait(),notify()和sleep()
- Java 多线程编程之五:一个理解 wait() 与 notify() 的例子
- 深入理解Java多线程中的wait(),notify()和sleep()
- 深入理解Java多线程中的wait(),notify()和sleep()
- 深入理解Java多线程中的wait(),notify()和sleep()
- 关于java中wait()和notify(),notifyAll()方法的理解
- 深入理解Java多线程中的wait(),notify()和sleep()
- 深入理解Java多线程中的wait(),notify()和sleep()
- 深入理解Java多线程中的wait(),notify()和sleep()
- java wait(),notify(),notifyAll()的理解
- Java Object对象中的wait,notify,notifyAll通俗理解
- 深入理解Java多线程中的wait(),notify()和sleep()
- Java对象锁wait()/notify()的一点理解
- 深入理解Java多线程中的wait(),notify()和sleep()