经典范式:
等待方遵循如下原则:
1、获取对象的锁。
2、如果条件不满足,那么调用对象的wait()方法,被通知后仍要检查条件。
3、条件满足则执行对应的逻辑任务。
伪代码如下:
synchronized(对象) {
while(条件不满足) {
对象.wait();
}
完成任务逻辑
}通知方遵循如下原则:
1、获得对象的锁。
2、改变条件。
3、通知所有等待在对象上的线程。
伪代码如下:
synchronized(对象) {
改变对象
对象.notifyAll();
}示例代码:
易通企业网站系统 别名CmsEasy 是国内唯一免费微信+手机端+微网站+手机短信+在线销售+多语言网站组合的企业营销管理平台,易通企业网站系统也称易通企业网站程序,是易通公司开发中国首套免费提供企业网站模板的营销型企业网站管理系统,系统前台生成html、完全符合SEO、同时有在线客服、潜在客户跟踪、便捷企业网站模板制作、搜索引擎推广等功能的企业网站系统。
154
import java.text.SimpleDateFormat;import java.util.Date;/**
* 线程等待/通知机制
* Created by peng on 2018/7/22.
*/public class WaitNotify {
private static boolean flag = true; private static Object lock = new Object(); public static void main(String[] args) {
Thread waitThread = new Thread(new Wait(), "WaitThread");
waitThread.start();
SleepUtils.second(1);
Thread notifyThread = new Thread(new Notify(), "NotifyThread");
notifyThread.start();
} private static class Wait implements Runnable {
@Override
public void run() { // 加锁,拥有lock的Monitor
synchronized (lock) { // 当条件不满足时,继续wait,同时释放了lock的锁
while (flag) {
try {
System.out.println(Thread.currentThread() + " flag is true. wait @ "
+ new SimpleDateFormat("HH:mm:ss").format(new Date()));
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
} // 条件满足时,完成工作
System.out.println(Thread.currentThread() + " flag is false. running @ "
+ new SimpleDateFormat("HH:mm:ss").format(new Date()));
}
}
}
private static class Notify implements Runnable {
@Override
public void run() { // 加锁,拥有lock的Monitor
synchronized (lock) {
System.out.println(Thread.currentThread() + " hold lock. notify @ "
+ new SimpleDateFormat("HH:mm:ss").format(new Date()));
lock.notifyAll();
flag = false;
SleepUtils.second(5);
} // 再次加锁
synchronized (lock) {
System.out.println(Thread.currentThread() + " hold lock again. sleep @ "
+ new SimpleDateFormat("HH:mm:ss").format(new Date()));
SleepUtils.second(5);
}
}
}
}以上就是Java多线程之《等待/通知机制》的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号