CountDownLatch实时通信
CountDownLatch
可以实现线程,实时通信
Await方法,等待
countDown方法,通知
区别
CountDownLatch,不需要配合synchronize使用
Wait/notify,必须配合synchronize使用
package com.bjsxt.base.conn008;import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.LinkedBlockingQueue;
/*** wait notfiy 方法,wait释放锁,notfiy不释放锁**/
public class ListAdd2 {private volatile static List list = new ArrayList(); public void add(){list.add("bjsxt");}public int size(){return list.size();}public static void main(String[] args) {final ListAdd2 list2 = new ListAdd2();// 1 实例化出来一个 lock// 当使用wait 和 notify 的时候 , 一定要配合着synchronized关键字去使用//final Object lock = new Object();final CountDownLatch countDownLatch = new CountDownLatch(1);Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {try {//synchronized (lock) {for(int i = 0; i <10; i++){list2.add();System.out.println("当前线程:" + Thread.currentThread().getName() + "添加了一个元素..");Thread.sleep(500);if(list2.size() == 5){System.out.println("已经发出通知..");countDownLatch.countDown();//lock.notify();}} //}} catch (InterruptedException e) {e.printStackTrace();}}}, "t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {//synchronized (lock) {if(list2.size() != 5){try {//System.out.println("t2进入...");//lock.wait();countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("当前线程:" + Thread.currentThread().getName() + "收到通知线程停止..");throw new RuntimeException();//}}}, "t2"); t2.start();t1.start();}}
运行
线程t1,添加了5个元素,发出通知
此时,线程t2会立即执行,不用等到线程t1执行完毕
注意
这里,1表示通知的次数
通知1次,就会唤醒线程t2
CountDownLatch实时通信相关推荐
- Java并发编程之CountDownLatch、CyclicBarrier和Semaphore
前言 本文为对CountDownLatch.CyclicBarrier.Semaphore的整理使用 CountDownLatch CountDownLatch类位于java.util.concurr ...
- java并发之同步辅助类CyclicBarrier和CountDownLatch
CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门, ...
- java 并发统计_java并发编程|CountDownLatch计数器
0x01,CountDownLatch介绍 CountDownLatch是一个计数器,作为java并发编程中三个组件之一,这个组件的使用频率还是很多的.这里分享下自己画的java并发编程组件的图,后面 ...
- JAVA中的并发工具 -- CountDownLatch、CyclicBarrier、Semaphore
2019独角兽企业重金招聘Python工程师标准>>> CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. CountDownLatc ...
- Java常用多线程辅助工具---countdownLatch
为什么80%的码农都做不了架构师?>>> 前言 上一篇博文说到semaphore,一个加强版的synchronized,该多线程辅助工具适用于控制对资源操作或者访问的场景.现在有一张 ...
- 一文搞懂 CountDownLatch 用法和源码!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! CountDownLatch 是多线程控制的一种工具,它被 ...
- CountDownLatch的实现分析
CountDownLatch CountdownLatch 是 JDK 并发包中提供的并发工具类,其允许一个或多个线程等待其他线程完成操作.常用作将一个任务拆分成多个子任务同时执行,只有子任务都执行完 ...
- LeetCode 1195. Fizz Buzz Multithreaded--并发系列题目--Java 解法--AtomicInteger/CountDownLatch/CyclicBarrier
题目地址:Fizz Buzz Multithreaded - LeetCode Write a program that outputs the string representation of nu ...
- CycliBarriar和CountdownLatch(计数器)
CyclicBarrier可以重复使用,而CountdownLatch不能重复使用. countDownLatch这个类使一个线程等待其他线程各自执行完毕再执行. 是通过一个计数器来实现的,计数器的初 ...
最新文章
- AirPods Pro真香,送一款!
- Core Graphics
- 上下定高 中间自适应_移动端布局上下固定中间自适应
- 895. 最长上升子序列
- android recycleview长按多选_UI设计中Android和IOS设计差异总结
- 入门机器学习(八)--神经网络参数的反向传播算法
- 雷林鹏分享:jQuery EasyUI 拖放 - 基本的拖动和放置
- 伸展树(splay tree)
- 英国外交部翻译教你实用口语课,让你飚出一口地道、流利英语
- 【论文简述及翻译】RAFT: Recurrent All-Pairs Field Transforms for Optical Flow(ECCV 2020)
- Smartbi:水泥行业实现数字化转型升级势在必行
- 【历史上的今天】9 月 29 日:“美国支付宝” Stripe 正式上线;HotJava 面世;VR/AR 领域先驱诞生
- 深入剖析 redis 事件驱动
- (一)掰开了,揉碎了,说经典halcon中的那些算子
- 设计抗混叠滤波器的三个指导原则--日记
- 【源码开发分享】计算机毕业设计之Python+Spark+Scrapy新闻推荐系统 新闻大数据 新闻情感分析 新闻文本分类 新闻数据分析 新闻爬虫可视化 大数据毕业设计
- 视觉SLAM十四讲学习笔记-第三讲-旋转向量、欧拉角、四元数
- AVI和WAV格式文件分析
- 不能打印机与计算机,电脑打印机无法打印
- Creative的迷失与重生之路
热门文章
- Spring MVC能响应HTTP请求的原因?
- JavaScript校验身份证,包含省份、长度、出生年月日、校验位的检测、性别、年龄...
- 项目开发涉及循坏的小思路
- 【开源】接口管理平台eoLinker AMS 开源版3.1.5同步线上版!免费增加大量功能!...
- 201521123113 《Java程序设计》第5周学习总结
- 仿京东首页上侧导航左侧地址栏布局(1)
- Quartz在Spring中动态设置cronExpression
- 蓝牙HCI剖析(二)
- 趣链 BitXHub跨链平台 (6)IBC通信协议
- 区块链BaaS云服务(11)招商银行ABS区块链平台