Java多线程之Exchanger(一)
来源:互联网 发布:西安朝阳软件 编辑:程序博客网 时间:2024/05/22 03:40
在Java中,Exchanger用于线程之间将数据换出去String data2 = (String)exchanger.exchange(data1);,这个当然也是线程阻塞的,
只要有另外一个线程(同个线程也可以)也换出数据。这时两个线程之间就可以互换数据了。当然线程之间谁先换出数据是无关紧要的,
因为换数据操作是阻塞的,只有等到两个线程都换出数据了,才能取得换回数据。
package three.day.thread;
import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExchangerTest {
public static void main(String[] args) {
//定义个缓存线程池
ExecutorService service = Executors.newCachedThreadPool();
//定义一个数据交换数据,将该对象放置在不同线程间进行换数据操作
final Exchanger exchanger = new Exchanger();service.execute(new Runnable(){
public void run() {
try {
Thread.sleep((long)(Math.random()*10000));
String data1 = "thread-a";
System.out.println("线程" + Thread.currentThread().getName() +
"正在把数据" + data1 +"换出去");
String data2 = (String)exchanger.exchange(data1);
System.out.println("线程" + Thread.currentThread().getName() +
"换回的数据为" + data2);
}catch(Exception e){
}
}
});
service.execute(new Runnable(){
public void run() {
try {
Thread.sleep((long)(Math.random()*10000));
String data1 = "thread-b";
System.out.println("线程" + Thread.currentThread().getName() +
"正在把数据" + data1 +"换出去");
String data2 = (String)exchanger.exchange(data1);
System.out.println("线程" + Thread.currentThread().getName() +
"换回的数据为" + data2);
}catch(Exception e){
}
}
});
service.shutdown();
}
}
- Java多线程之Exchanger(一)
- Java多线程--Exchanger(一)
- java多线程之(Exchanger)
- Java多线程之Exchanger
- JAVA多线程之Exchanger
- Java多线程之Exchanger
- Java多线程之Exchanger
- java多线程之Exchanger
- java 多线程之Exchanger
- (十二)java多线程之Exchanger
- 【java】多线程控制(一)---Semaphore、Exchanger、CyclicBarrier、CountDownLatch
- Java多线程--Exchanger(二)
- Java多线程(八)之Semaphore、CountDownLatch、CyclicBarrier、Exchanger
- Java多线程(八)之Semaphore、CountDownLatch、CyclicBarrier、Exchanger
- java多线程同步工具之Exchanger
- Java基础:多线程之CountDownLatch、CyclicBarrier、Exchanger
- 多线程之Exchanger
- Java多线程十一 Exchanger
- hdu 4763 Theme Section
- C# Attribute的概念与使用浅析
- 排序算法_简单选择排序
- 明天再去爬香山!
- Vehicle类
- Java多线程之Exchanger(一)
- 态度!!!!!
- 段页式存储管理
- LINUX C语言文件的读写(非二进制)
- poj 3419 Difference Is Beautiful (区间最长连续不重复数 dp+二分+RMQ)
- windows bat脚本编写
- 使用Fragment实现简单的数据交互
- Warning: Attempt to present A on B whose view is not in the window hierarchy!
- Polay定理总结