您的位置:首页 > 编程语言 > Java开发

13____java线程同步工具类之线程数据交换(Exchanger)

2014-03-13 11:48 701 查看
Exchanger也属于java5并发库中。所实现的功能是线程间的数据交换。但是需要注意的是,只能是两个线程的数据交换。

当某一个线程运行Exchanger的exchange()方法后,说明交换状态准备完毕,然后进入阻塞状态,等待另外一个线程调用exchange()方法。然后两者交换数据后继续运行。有点一手交钱一手交货的意思。

例子:

public class ThreadExchangerTest {

public static void main(String[] args) {
Exchanger<String> ex = new Exchanger<String>();
new Thread(new Buyer(ex),"许阳").start();
new Thread(new Saller(ex),"商店").start();
}

static class Buyer implements Runnable{
private Exchanger<String> ex;

public Buyer(Exchanger<String> ex) {
super();
this.ex = ex;
}

public void run() {
try {
String money = "五元钱";
System.out.println(Thread.currentThread().getName()+"拥有"+money);
Thread.sleep(1000);
System.out.println("开始交易......");
String busniess = (String)ex.exchange(money);
System.out.println(Thread.currentThread().getName()+"得到"+busniess);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

static class Saller implements Runnable{
private Exchanger<String> ex;

public Saller(Exchanger<String> ex) {
super();
this.ex = ex;
}

public void run() {
try {
String busniess = "beverage";
System.out.println(Thread.currentThread().getName()+"拥有"+busniess);
String money = ex.exchange(busniess);
System.out.println(Thread.currentThread().getName()+"得到:"+money);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
运行后结果:

许阳拥有五元钱

商店拥有beverage

开始交易......

商店得到:五元钱

许阳得到beverage
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: