如何使用Latch代替wait notify来进行通知
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章将为大家详细讲解有关如何使用Latch代替wait notify来进行通知,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。/** * 曾经的面试
千家信息网最后更新 2025年12月02日如何使用Latch代替wait notify来进行通知
这篇文章将为大家详细讲解有关如何使用Latch代替wait notify来进行通知,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
/** * 曾经的面试题:(淘宝?) * 实现一个容器,提供两个方法,add,size * 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束 * * 给lists添加volatile之后,t2能够接到通知,但是,t2线程的死循环很浪费cpu,如果不用死循环,该怎么做呢? * * 这里使用wait和notify做到,wait会释放锁,而notify不会释放锁 * 需要注意的是,运用这种方法,必须要保证t2先执行,也就是首先让t2监听才可以 * * 阅读下面的程序,并分析输出结果 * 可以读到输出结果并不是size=5时t2退出,而是t1结束时t2才接收到通知而退出 * 想想这是为什么? * * notify之后,t1必须释放锁,t2退出后,也必须notify,通知t1继续执行 * 整个通信过程比较繁琐 * * 使用Latch(门闩)替代wait notify来进行通知 * 好处是通信方式简单,同时也可以指定等待时间 * 使用await和countdown方法替代wait和notify * CountDownLatch不涉及锁定,当count的值为零时当前线程继续运行 * 当不涉及同步,只是涉及线程通信的时候,用synchronized + wait/notify就显得太重了 * 这时应该考虑countdownlatch/cyclicbarrier/semaphore * @author mashibing */package yxxy.c_019;import java.util.ArrayList;import java.util.List;import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeUnit;public class MyContainer5 { // 添加volatile,使t2能够得到通知 volatile List lists = new ArrayList(); public void add(Object o) { lists.add(o); } public int size() { return lists.size(); } public static void main(String[] args) { MyContainer5 c = new MyContainer5(); //门闩(当这个1变成0的时候,这个门闩就开了) CountDownLatch latch = new CountDownLatch(1); new Thread(() -> { System.out.println("t2启动"); if (c.size() != 5) { try { //门闩等待不需要锁定任何对象 latch.await(); //也可以指定等待时间 //latch.await(5000, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("t2 结束"); }, "t2").start(); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e1) { e1.printStackTrace(); } new Thread(() -> { System.out.println("t1启动"); for (int i = 0; i < 10; i++) { c.add(new Object()); System.out.println("add " + i); if (c.size() == 5) { // 打开门闩,让t2得以执行 latch.countDown(); } try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } }, "t1").start(); }}关于如何使用Latch代替wait notify来进行通知就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
线程
门闩
方法
通信
两个
个数
元素
内容
容器
文章
时候
时间
更多
知识
篇文章
结果
循环
输出
不错
繁琐
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
泉州软件开发价格
微软件开发简称
个税申报软件开发单位
贵广网络技术支持岗相关知识
镇江市丹徒分局网络安全技术
如何建数据库
沃因特网络技术有限公司
网络技术专业毕业一般干什么
手机验证码拦截软件开发
数据库前沿技术论文
提升职工网络安全意识的重要性
如东im即时通讯软件开发
亚马逊怎么租服务器
上海咖互联网科技中心
数据库建旅游景点表
计算机网络安全的目的什么
wiod 数据库如何看
会会计和计算机网络技术
网络安全培训费用课程
轻量服务器公众号
电驴服务器在国内吗
奉贤区电子网络技术产品
cf南部的服务器在哪
王牌战争怎么服务器能随时拆家
甘南网络安全知识大比拼
电脑网络安全警示语
打造网络安全和信息化
网络技术是什么类
丽水学软件开发是做什么的
易保网络技术有限公司业务