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

current包下Exchanger的使用

2015-12-28 00:00 507 查看
Exchanger可以实现两个线程交换数据的功能。

demo:

public static void main(String[] args) {
final Exchanger<String> exchanger = new Exchanger<String>();
new Thread(new Runnable() {
public void run() {
String name = "Jack";
try {
System.out.println(Thread.currentThread().getName() + "   start....  name = " + name);
name = exchanger.exchange(name);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "   end....   name = " + name);
}
}).start();

new Thread(new Runnable() {
String name = null;

public void run() {
try {
System.out.println(Thread.currentThread().getName() + "   start....  name = " + name);
Thread.sleep(10000);
name = exchanger.exchange(name);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "   end....   name = " + name);

}
}).start();
}

执行结果:

Thread-0   start....  name = Jack
Thread-1   start....  name = null
Thread-1   end....   name = Jack
Thread-0   end....   name = null

当Thread-0执行exchanger.exchange(name)的时候进入到阻塞状态。

等待Thread-1也执行到exchanger.exchange(name)之后再继续执行,两个线程的name也相互交换了结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息