concurrent包下的Exchanger练习
Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据。
当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用了exchange()方法,然后以线程安全的方式交换数据,之后线程A和B继续运行。
1 package cn.sp.test4; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 import java.util.concurrent.Exchanger; 6 7 /** 8 * Created by 2YSP on 2017/9/1. 9 * 两个线程之间交换数据 10 */ 11 public class ExchangerTest { 12 13 14 public static void main(String[] args) { 15 final Exchanger<List<Integer>> exchanger = new Exchanger<>(); 16 17 new Thread(() -> { 18 List<Integer> l = new ArrayList<Integer>(2); 19 l.add(1); 20 l.add(2); 21 try { 22 l = exchanger.exchange(l); 23 } catch (InterruptedException e) { 24 e.printStackTrace(); 25 } 26 System.out.println("thread1: " + l); 27 }).start(); 28 29 new Thread(() -> { 30 List<Integer> l = new ArrayList<Integer>(2); 31 l.add(3); 32 l.add(4); 33 try { 34 l = exchanger.exchange(l); 35 } catch (InterruptedException e) { 36 e.printStackTrace(); 37 } 38 System.out.println("thread2: " + l); 39 }).start(); 40 41 } 42 }
执行结果:
可以看到线程1和2已经交换了数据。
转载于:https://www.cnblogs.com/2YSP/p/7483584.html
concurrent包下的Exchanger练习相关推荐
- java concurrent 框架,java.util.concurrent 包下的 Synchronizer 框架
看完书 java concurrency in practice 当然是想找点啥好玩的东东玩玩. 当看到了Doug Lee 的论文 << The java.util.concurrent ...
- [Jdk源码学习]聊聊concurrent包下面的volite*
引子:关于Java并发中的volatile关键字 并切--定义 悲观锁: 1.一个线程在执行一个操作时持有对一个资源的独占锁(A线程占了资源a,则其他线程就不能操作资源a) 2.一般用在冲突比较可能发 ...
- Concurrent包下的常用并发类和普通类之间的区别
1. ConcurrentHashMap和HashMap以及Hashtable之间的区别 1.1 HashMap不是线程安全的,key和value都可为null:而Hashtable是线程安全的,代码 ...
- Java工具包工具类,java.util.concurrent 包下工具类的使用
CountDownLacth 的使用 常用于监听某些初始化操作,等初始化执行完毕,通知主线程继续执行. 先看示例代码: public class UseCountDownLatch { public ...
- concurrent包下线程池类小结
并发包下的线程池技术虽然常用,但是知识点较多易忘.所以,参考网络资源做了一个小结,便于复习. 1.Executor接口 用于执行已提交的Runnable任务. Paste_Image.png 2.Ex ...
- java.util 常见_Java基础知识-java.util.concurrent包下常见类的使用
一,Condition 一个场景,两个线程数数,同时启动两个线程,线程A数1.2.3,然后线程B数4.5.6,最后线程A数7.8.9,程序结束,这涉及到线程之间的通信. public classCon ...
- 多线程十 JUC包下的常用工具类
JUC包下的常用工具类 1. CountDownLatch-闭锁 2. CyclicBarrier-循环栅栏 3. Semaphore-信号量 4. Exchanger-线程数据交换器 这篇文章主要是 ...
- Java - concurrent包详解
我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便.而当针对高质量Java ...
- 模特赛马java课程设计_Thinking in Java---Concurrent包下的新构件学习+赛马游戏仿真...
Java5的java.util.concurrent包下引入了大量的用于解决并发问题的新类:相对于前面那些基础的线程同步和通信的方法,这些新类是一种更高层次上的抽象,使用起来还是比较容易的.这篇博客就 ...
最新文章
- vue中点击第一次没有触发按钮怎么操作_vue如何触发某个元素的单击事件?
- 机器学习和洗衣机的关系?
- [ZJOI 2010]count 数字计数
- PostgreSQL在何处处理 sql查询之五十一
- 【PAT甲级 多项式相乘】1009 Product of Polynomials (25 分) C++ 全部AC
- Linux 自带的LED 灯驱动实验
- Linux下日志分析的几个常用命令
- android view过度动画,为View的切换添加过渡动画
- 漫步最优化十六——优化的一般问题
- 电力物联网智慧路灯充电桩传感器技术应用方案
- 某车企笔试题解答(1)
- linux服务器运行dyna,dynamips分布式实现详解
- Hookswork多帐户跨平台MT4跟单软件的十二大优势:
- 我们为什么存在于三维空间而不是四维空间
- 芯片烧录器编程AT24C02
- 【数据库基础】01_数据库概述与MySQL语法基础
- 【java后端】容器集合
- 通过python调用OpenAI的API
- 315再曝数据安全问题,短信钓鱼、App窃密等成焦点
- 刚出的!2019中囯城市实力大排名!看完惊到了!
热门文章
- jpg无损压缩 java_使用FreeImage对JPEG进行无损优化
- linux setuid函数_setuid函数解析
- 安卓总线传输协议常用关键词
- 树莓派怎么学linux,树莓派使用入门用树莓派学 Linux
- 合并两个有序数组 java_合并两个有序的数组
- java list 占用内存不释放_性能不打折,内存占用减少90%,Facebook提出极致模型压缩方法Quant-Noise...
- k8s pod里访问不到外部ip_K8S容器网络如何实现通信?
- python中format函数用法简书_增强的格式化字符串format函数
- go 生成hash_go基础之map-写在前面(一)
- java窗体线条切换消失_java – 如何更改apache poi生成的图表不使用平滑线条并将空单元格显示为间隙?...