java exchanger_java Exchanger
Exchanger 用于两个线程之间交换数据,举例;
package com.hts;
import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExchangerTest {
class Product implements Runnable{
Exchanger exchanger ;
Product(Exchanger exchanger ){
this.exchanger = exchanger;
}
@Override
public void run() {
int data;
for(int i = 1;i<11;i++){
data = i;
System.out.println("Product"+i+"交换前:" + data);
try {
data = exchanger.exchange(data);
System.out.println("Product"+i+"交换后:" + data);
System.out.println();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
Exchanger exchanger ;
Consumer(Exchanger exchanger ){
this.exchanger = exchanger;
}
@Override
public void run() {
int data = 0;
for(int i = 1;i<11;i++){
data = 0;
System.out.println("Consumer"+i+"交换前:" + data);
try {
data = exchanger.exchange(data);
System.out.println("Consumer"+i+"交换后:" + data);
System.out.println();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
Exchanger exchanger = new Exchanger<>();
ExecutorService executorService = Executors.newFixedThreadPool(2);
executorService.submit(new ExchangerTest().new Product(exchanger));
executorService.submit(new ExchangerTest().new Consumer(exchanger));
}
}
执行结果:
大概意思就是一个线程交换的数字是从1-10,而另一个线程则每次交换的数据都是0,可以看出这个exchanger.exchange(data);方法是一个阻塞方法,当一个线程等待交换时,一定会等到另一个线程也执行exchanger.exchange(data)同时进行交换,交换后才会继续往下执行。
java exchanger_java Exchanger相关推荐
- java exchanger_java线程中Exchanger使用
有时我们须要对元素进行配对和交换线程的同步点,使用exchange方法 返回其伙伴的对象,这时我们就须要使用线程类中的Exchanger类了, 我通过一个实例 来简单说明一下他的用法及其作用: imp ...
- java怎么缓存行填充_为什么java的Exchanger.Slot缓存行填充像这样?
当我在 java中阅读'虚假共享'机制时,我在java.util.concurrent.Exchanger.Slot中找到以下代码 /** * A Slot is an AtomicReference ...
- java并发Exchanger的使用
文章目录 简介 类定义 类继承 构造函数 两个主要方法 具体的例子 结语 简介 Exchanger是java 5引入的并发类,Exchanger顾名思义就是用来做交换的.这里主要是两个线程之间交换持有 ...
- Java之Exchanger使用
Java 并发 API 提供了一种允许2个并发任务间相互交换数据的同步应用.更具体的说,Exchanger 类允许在2个线程间定义同步点,当2个线程到达这个点,他们相互交换数据类型,使用第一个线程的数 ...
- exchanger_如何通过示例在Java中使用Exchanger
exchanger 大家好,如果您在并发Java应用程序中工作,那么您可能听说过java.util.concurrent包的Exchanger类. Java中的Exchanger是Java 1.5中与 ...
- 如何通过示例使用Java中的Exchanger
大家好,如果您在并发Java应用程序中工作,那么您可能听说过java.util.concurrent包的Exchanger类. Java中的Exchanger是Java 1.5中与CountDownL ...
- Java Exchanger
Exchanger 简介 JDK1.5 java.util.concurrent 包 提供了 Exchanger类允许在2个线程间定义同步点,当2个线程到达这个点,他们相互交换数据类型,使用第一个线 ...
- class转java_[拒绝套路,纯干货]这一百多道 Java 基础问题你掌握了吗?
码农每日一题长按关注,工作日分享一些技术知识点. [每日一题]Java 基本数据类型基础面试题 [每日一题]Java 包装类型装箱拆箱基础面试题 [每日一题]Java 字符串(Part 1)相关面试题 ...
- 死磕Java并发:J.U.C之并发工具类:Exchanger
作者:chenssy 来源:Java技术驿站 前面三篇博客分别介绍了CyclicBarrier.CountDownLatch.Semaphore,现在介绍并发工具类中的最后一个Exchange.Exc ...
最新文章
- C语言怎么实现单词下落,如何用c语言实现单词统计
- AI大神Yann LeCun谈近期AI发展:最聪明的AI在常识方面还不如猫
- sql 中使用 where 1=1 和 where 1=0的作用
- Django从理论到实战(part47)--ListView类
- mysql-索引操作
- 普中科技51单片机_【笔记】-普中科技-51单片机-按键
- android自动点击开红包,自动点击连点器
- 微信公众号:服务号、企业订阅号、个人订阅号的差异对比
- 如何找出当前活动桌面背景图像的位置/路径(Ubuntu 18.04,GNOME)?
- javascript 中文转拼音代码
- 速腾雷达录包方法(32线)
- java - 锁粒度
- zotero+better bibtex+overleaf(latex):如何批量导出参考文献及相关设置
- 【算法】958- 动图演示:彻底理解红黑树?
- 了解TypeScript装饰器
- windows 快捷键(基本快捷键)
- kido机器人用流量吗_当4G遇到儿童手表 乐视Kido Watch评测
- 批处理获取整台计算机的盘符,可以用批处理的方法更改盘符吗?
- 汇编与接口技术课程总结1——汇编程序debug调试
- [转](2条消息) Unity3D模型 | SolidWorks建模导入Unity