线程并发工具--Exchanger
2014-10-18 17:17
357 查看
Exchanger可以实现两个线程之间的数据交换:
final Exchanger<String> exchanger = new Exchanger<String>();
new Thread(new Runnable(){
@Override
public void run() {
try {
Thread.sleep(new Random().nextInt(5000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":i am ready to buy!");
String give = "money";
try {
String goods = exchanger.exchange(give);
System.out.println(Thread.currentThread().getName() + ": give " + give + " and get " + goods);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
try {
Thread.sleep(new Random().nextInt(5000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":i am ready to sale!");
String sale = "goods";
try {
String money = exchanger.exchange(sale);
System.out.println(Thread.currentThread().getName() + ": give " + sale + " and get " + money);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();上面的示例模拟了买卖双方的一个交换:
Thread-1:i am ready to sale!
Thread-0:i am ready to buy!
Thread-0: give money and get goods
Thread-1: give goods and get money
final Exchanger<String> exchanger = new Exchanger<String>();
new Thread(new Runnable(){
@Override
public void run() {
try {
Thread.sleep(new Random().nextInt(5000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":i am ready to buy!");
String give = "money";
try {
String goods = exchanger.exchange(give);
System.out.println(Thread.currentThread().getName() + ": give " + give + " and get " + goods);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable(){
@Override
public void run() {
try {
Thread.sleep(new Random().nextInt(5000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":i am ready to sale!");
String sale = "goods";
try {
String money = exchanger.exchange(sale);
System.out.println(Thread.currentThread().getName() + ": give " + sale + " and get " + money);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();上面的示例模拟了买卖双方的一个交换:
Thread-1:i am ready to sale!
Thread-0:i am ready to buy!
Thread-0: give money and get goods
Thread-1: give goods and get money
相关文章推荐
- Java并发工具类之线程间数据交换工具Exchanger
- Java多线程与并发库高级应用之线程数据交换Exchanger
- 线程并发工具--Semaphore(信号灯)
- Java并发工具类(四):线程间交换数据的Exchanger
- 并发工具类(三)控制并发线程的数量 Semphore
- 并发编程工具之四:Exchanger 使用
- java5线程并发库中的工具
- 并发编程之 线程协作工具 LockSupport
- Java线程总结(十):并发包------两个线程交换数据Exchanger
- 【java并发】线程同步工具Exchanger的使用
- Java并发学习(十八)-并发工具Exchanger
- 线程:Exchanger同步工具
- 线程并发工具--CountDownLatch
- 线程并发工具--CyclicBarrier
- 【Java多线程与并发库】15.java5的Exchanger同步工具
- Java并发和多线程4:使用通用同步工具CountDownLatch实现线程等待
- Java多线程与并发库高级应用之线程数据交换Exchanger
- 同步工具之Exchanger实现线程间的数据交换
- 线程并发工具--线程安全集合
- Java多线程/并发25、Exchanger线程数据交换