Java线程之Exchanger
来源:互联网 发布:java 泛型 getclass 编辑:程序博客网 时间:2024/05/17 21:54
Exchanger可以在两个线程之间交换数据,只能是2个线程,他不支持更多的线程之间互换数据。
当线程A调用Exchange对象的exchange()方法后,他会陷入阻塞状态,直到线程B也调用了exchange()方法,然后以线程安全的方式交换数据,之后线程A和B继续运行
public class ThreadLocalTest {public static void main(String[] args) {Exchanger<List<Integer>> exchanger = new Exchanger<>();new Consumer(exchanger).start();new Producer(exchanger).start();}}class Producer extends Thread {List<Integer> list = new ArrayList<>();Exchanger<List<Integer>> exchanger = null;public Producer(Exchanger<List<Integer>> exchanger) {super();this.exchanger = exchanger;}@Overridepublic void run() {Random rand = new Random();for(int i=0; i<10; i++) {list.clear();list.add(rand.nextInt(10000));list.add(rand.nextInt(10000));list.add(rand.nextInt(10000));list.add(rand.nextInt(10000));list.add(rand.nextInt(10000));try {list = exchanger.exchange(list);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}class Consumer extends Thread {List<Integer> list = new ArrayList<>();Exchanger<List<Integer>> exchanger = null;public Consumer(Exchanger<List<Integer>> exchanger) {super();this.exchanger = exchanger;}@Overridepublic void run() {for(int i=0; i<10; i++) {try {list = exchanger.exchange(list);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.print(list.get(0)+", ");System.out.print(list.get(1)+", ");System.out.print(list.get(2)+", ");System.out.print(list.get(3)+", ");System.out.println(list.get(4)+", ");}}}
- Java线程之Exchanger
- java线程之Exchanger
- java线程系列---同步器之Exchanger
- Java线程之semaphore和Exchanger
- java线程Exchanger
- Java线程通信-Exchanger
- Java线程之Exchanger-兄弟线程的信息交换
- Java高级篇(四十五)------Java线程之Exchanger
- Java多线程之~~~使用Exchanger在线程之间交换数据
- java多线程之通过Exchanger线程间传递数据
- Java多线程之Exchanger
- JAVA多线程之Exchanger
- Java多线程之Exchanger
- Java多线程之Exchanger
- java多线程之Exchanger
- Java高级之Exchanger
- Java并发之Exchanger
- java 多线程之Exchanger
- 第二篇 RMAN命令知多少--转自君三思
- 泛泰Bin文件格式解析及解压出IMG方法
- Unity3D4.0教程:破解步骤
- Wpf WndProc 消息处理
- 普通用户执行脚本具有root用户权限
- Java线程之Exchanger
- MSP430F249硬件I2C查询法读写AT24C02
- Asterisk拨号方案中变量的应用
- 第三篇 RMAN备份演练初级篇--转自君三思
- 大白话解析模拟退火算法
- su 从root用户切到普通用户执行命令
- EXT combobox赋值
- WdatePicker.js的使用方法 帮助文档 使用说明(时间控件)
- sql注入: