Java并发之Exchanger类
来源:互联网 发布:譬如工画师 不能知自心 编辑:程序博客网 时间:2024/05/18 03:25
应用场景
如果两个线程在运行过程中需要交换彼此的信息,可以使用Exchanger这个类。
Exchanger为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步点,只有当每个线程都在进入 exchange ()方法并给出对象时,才能接受其他线程返回时给出的对象。
使用方法
Exchanger的构造方法如下:
- Exchanger(); //创建一个新的 Exchanger。
Exchanger用到的主要方法有:
exchange(V x); //等待另一个线程到达此交换点(除非它被中断),然后将给定的对象传送给该线程,并接收该线程的对象。
exchange(V x, long timeout, TimeUnit unit); // 等待另一个线程到达此交换点(除非它被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。
实例代码
package Exchanger;import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class Exechanger { public static void main(String[] args) { ExecutorService exec=Executors.newCachedThreadPool(); Exchanger<String> exchanger=new Exchanger<>(); new Thread() { @Override public void run() { String data1="data1"; try { System.out.println(Thread.currentThread().getName()+"交换前的数据:"+data1); String data2=exchanger.exchange(data1); System.out.println(Thread.currentThread().getName()+"交换后的数据:"+data2); } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); new Thread() { @Override public void run() { String data2="data2"; try { System.out.println(Thread.currentThread().getName()+"交换前的数据:"+data2); String data1=exchanger.exchange(data2); System.out.println(Thread.currentThread().getName()+"交换后的数据:"+data1); } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); }}
阅读全文
0 0
- Java并发之Exchanger类
- Java并发之Exchanger
- java并发编程之Exchanger
- Java并发之Exchanger详解
- java 并发工具类-Exchanger
- Java并发编程-同步辅助类之Exchanger
- java并发--Exchanger
- Java并发同步器--Exchanger
- 【死磕Java并发】-----J.U.C之并发工具类:Exchanger
- Exchanger 并发工具类
- Java并发编程系列之二十四:Exchanger
- java并发编程系列之Exchanger的使用
- java并发库 Exchanger 简析
- Java 并发 --- Exchanger源码分析
- 多线程进阶之并发工具类第二篇:Semaphore、Exchanger
- java同步工具类之Exchanger
- JAVA多线程系列--并发工具类(CountDownLatch, CyclicBarrier, Semaphore,Exchanger)
- Java多线程之Exchanger
- MATLAB元胞数组写入Access数据库
- 在 centos7 版本中的 各项服务启动命令
- 2018京东笔试
- 面试题(2)
- 解决nginx重启“var/run/nginx/nginx.pid" no such file or directory问题
- Java并发之Exchanger类
- 初识linux
- 1054 map<int,int>
- 写个发邮件的功能php的(全代码)
- Java byte 类型的取值范围是-128~127
- HDU 6199 gems gems gems 2017沈阳网络赛 1006
- JAVA动态代理详解
- [python]leetcode(128). Longest Consecutive Sequence
- Leetcode c语言-Reverse Integer