多线程之等待通知机制
来源:互联网 发布:学生男鞋品牌 知乎 编辑:程序博客网 时间:2024/06/01 07:14
闲话少说,直接上代码:
package com.ilucky.test.jdk.util.concurrent;import java.util.Date;/** * 等待/通知机制. * 等待/通知机制,是指一个线程A调用了对象O的wait()方法进入等待状态,而另一个线程B调用了O对象的notify() * 或者notifyAll()方法, 线程A收到通知后从对象O的wait()方法返回,进而执行后面的操作。 * 两个线程通过对象O来完成交互, 而对象上的wait和notify/notifyAll方法如同开关信号一样。 * 用来完成等待方和通知方之间的交互工作。 * * 注意: * 1. wait, notify和notifyAll方法调用前,需要先对对象加锁。 * 2. wait方法调用后,会释放锁。 * 3. notify和notifyAll方法调动后,不会立刻从wait方法返回,还需要释放锁。 * 4. wait方法调用后,线程状态由Running状态变为waitting状态, 并将当前线程放到对象的等待队列。 * 5. notify和notifyAll方法调用后,将等待队列中的一个(或者全部)线程从等待队列中移动到同步队列中。 * * 另外,需要注意: 等待/通知机制依赖于同步机制。 * @author IluckySi * */public class WaitNotifyTest { public static void main(String[] args) { Object lock = new Object(); new WaitThread(lock).start(); try { System.out.println("---------等待线程执行完成2秒后,再执行通知线程--------"); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } new NotifyThread(lock).start(); }}class WaitThread extends Thread { private Object lock; WaitThread(Object lock) { this.lock = lock; } public void run() { System.out.println(new Date() + "-----------【进入等待线程】---------"); synchronized(lock) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(new Date() + "------------等的花儿都谢了...[开始执行业务逻辑了]"); } }}class NotifyThread extends Thread { private Object lock; NotifyThread(Object lock) { this.lock = lock; } public void run() { System.out.println(new Date() + "-----------【进入通知线程】---------"); synchronized(lock) { lock.notify(); try { System.out.println(new Date() + "---------通知完睡5秒--------"); Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(new Date() + "---------睡完5秒继续加锁--------"); synchronized(lock) { System.out.println(new Date() + "---------这次我就自己玩了,不通知别人了--------"); } }}/**注意观察时间:---------等待线程执行完成2秒后,再执行通知线程--------Wed May 24 12:15:37 GMT+08:00 2017-----------【进入等待线程】---------Wed May 24 12:15:39 GMT+08:00 2017-----------【进入通知线程】---------Wed May 24 12:15:39 GMT+08:00 2017---------通知完睡5秒--------Wed May 24 12:15:44 GMT+08:00 2017---------睡完5秒继续加锁--------Wed May 24 12:15:44 GMT+08:00 2017---------这次我就自己玩了,不通知别人了--------Wed May 24 12:15:44 GMT+08:00 2017------------等的花儿都谢了...[开始执行业务逻辑了]*/
阅读全文
0 0
- 多线程之等待通知机制
- 多线程 等待/通知机制
- 多线程的等待/通知机制
- 《多线程编程》学习之七:等待/通知机制(一)
- 《多线程编程》学习之七:等待/通知机制(二)
- java多线程之线程间通信:等待/通知机制
- Java多线程之线程间通信--等待(wait)/通知(notify)机制,等待/通知之交叉备份实例
- java多线程的等待和通知机制
- java多线程系列(三)---等待通知机制
- java多线程系列(三)---等待通知机制
- 多线程 等待/通知机制的实现
- 多线程编程中的等待/通知机制和等待超时模式
- 多线程之等待唤醒机制
- 3.1.1多线程通讯(等待通知机制)
- 等待/通知机制:
- 通知等待机制
- java多线程通信之等待唤醒机制
- 多线程-生产者消费者之等待唤醒机制
- LeetCode 36 Valid Sudoku
- javascript 闭包
- C#,往线程里传参数的方法总结
- ListView显示当前选取的item
- 应为本机上的jdk版本低导致spring-tool-suite无法启动
- 多线程之等待通知机制
- C++线程传递多个参数demo
- OmniFocus for Mac的几个快捷键
- httpd配置详解(四)
- PHP环境搭建(9)----mongoDB安装
- MFC 获取当前系统的分辨率
- android sparseArray源码解析,比较hashmap
- 前端魔法堂:屏蔽Backspace导致页面回退
- mybatis 专场(未完待续...)