java线程数据交换Exchanger
两个线程都等到交换函数才能完成交换数据操作,代码如下:
package threadLock; import java.util.Random;
import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; public class ExchangerTest { public static void main(String[] args) {
final Exchanger<String> ex = new Exchanger<String>();
ExecutorService service = Executors.newCachedThreadPool();
service.execute(new Runnable() {
public void run() {
String data1 = "";
System.out.println("线程" + Thread.currentThread().getName() + "正在把" + "\"" + data1 + "\"交换出去" );
try {
Thread.sleep(new Random().nextInt());
String data2 = ex.exchange(data1);
System.out.println("线程" + Thread.currentThread().getName() + "交换后的数据为\"" + data2 + "\"");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
service.execute(new Runnable() { @Override
public void run() {
String data1 = "gghhh";
System.out.println("线程" + Thread.currentThread().getName() + "正在把" + "\"" + data1 + "\"交换出去" );
try {
Thread.sleep(new Random().nextInt());
String data2 = ex.exchange(data1);
System.out.println("线程" + Thread.currentThread().getName() + "交换后的数据为\"" + data2 + "\"");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}); service.shutdown();
}
}
java线程数据交换Exchanger的更多相关文章
- [笔记][Java7并发编程实战手冊]3.8 并发任务间的数据交换Exchanger
[笔记][Java7并发编程实战手冊]系列文件夹 简单介绍 Exchanger 是一个同步辅助类.用于两个并发线程之间在一个同步点进行数据交换. 同意两个线程在某一个点进行数据交换. 本章exchan ...
- java 线程数据同步
java 线程数据同步 由买票实例 //java线程实例 //线程数据同步 //卖票问题 //避免重复卖票 //线程 class xc1 implements Runnable{ //定义为静态,可以 ...
- 并发库应用之十 & 多线程数据交换Exchanger应用
申明:用大白话来说就是用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人会一直等待第二个人,直到第二个人拿着数据到来时,才能彼此交换数据. java.util ...
- Java 常见数据交换格式——xml、json、yaml
目录 数据交换格式介绍 XML 使用DOM方式解析 使用SAX方式解析 使用DOM4J方式解析 使用JDOM方式解析 JSON 使用JSONObject方式将数据转换为JSON格式 利用JSONObj ...
- Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger
本文将要介绍的内容都是Java5中的新特性,一个是倒计时记数器---CountDownLatch,另一个是用于线程间数据交换的Exchanger. 一.CountDownLatch 1.什么是Coun ...
- Java线程--Exchanger使用
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11868576.html Java线程--Exchanger使用: Exchanger 是用来交 ...
- Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会有解决很多问题]生产者消费者模型
http://blog.csdn.net/a352193394/article/details/39503857 Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会 ...
- Java并发工具类(四):线程间交换数据的Exchanger
简介 Exchanger(交换者)是一个用于线程间协作的工具类.Exchanger用于进行线程间的数据交换.它提供一个同步点,在这个同步点两个线程可以交换彼此的数据.这两个线程通过exchange方法 ...
- Java并发编程--6.Exchanger线程间交换数据
在两个线程之间定义同步点,当两个线程都到达同步点时,他们交换数据结构,因此第一个线程的数据结构进入到第二个线程中,第二个线程的数据结构进入到第一个线程中 在生产者-消费者情境模式中它包含了一个数缓冲区 ...
随机推荐
- nodejs学习随笔
<一> 简述nodejs (社区:www.npmjs.com)可查找一些第三方模块. nodejs是可以让js运行在浏览器之外的服务器端的平台,实现了文件系统.模块.包.操作系统API.网 ...
- ionic的弹出框$ionicPopover
在ionic.html中 在controller.js中
- 在cmd中连接数据库
1.进入mysql安装路径的 mysql/bin 目录(即mysqld.exe所在目录) 2.在cmd中输入mysql进入mysql操作环境(mysql -u root -p )链接mysql并输入密 ...
- HDU 1847 Good Luck in CET-4 Everybody! 博弈
题目思路: 写出SG函数(1表示先手胜,0表示先手负) 110110110110-- 发现n%3==0时,Cici胜 #include<stdio.h> #include<strin ...
- zookeeper分布式锁避免羊群效应(Herd Effect)
本文(转自:http://jm-blog.aliapp.com/?p=2554)主要讲述在使用ZooKeeper进行分布式锁的实现过程中,如何有效的避免“羊群效应( herd effect)”的出现. ...
- 二十六、oracle pl/sql 分页
一.无返回值的存储过程 古人云:欲速则不达,为了让大家伙比较容易接受分页过程编写,我还是从简单到复杂,循序渐进的给大家讲解.首先是掌握最简单的存储过程,无返回值的存储过程. 案例:现有一张表book, ...
- mybatis笔记(一)
mybatis (一)传值 三种方式 1.直接传值void getMessageList(int userId,String userName);mapper.xml 获取 #{0}代表userId ...
- OBIEE 12C
OBIEE 12C安装配置 oracle官网下载BIEE12C 在虚拟机上安装 linux 在SQLPLUS启动和停止Oracle数据库 重启oracle数据库 cmd->1.lsnrctl s ...
- Android Paint Xfermode 学习小结
一.setXfermode(Xfermode xfermode) Xfermode国外有大神称之为过渡模式,这种翻译比较贴切但恐怕不易理解,大家也可以直接称之为图像混合模式,因为所谓的"过渡 ...
- js--性能优化(转)
前言 一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够透彻异或是自己太笨,更多的是自己 ...