用于两个线程之间进行交换数据。
线程A执行到exchange(s)其阻塞住,并且把数据放置于格子1处;
线程B执行到exchange(s)同样被阻塞住,并把数据放置于格式2处,进行数据交换。然后格子往下执行。
使用场景:两个线程之间互相通信,双人游戏交换装备等
import java.util.concurrent.Exchanger;
public class T12_TestExchanger {
static Exchanger<String> exchanger = new Exchanger<>();
public static void main(String[] args) {
new Thread(()->{
String s = "T1";
try {
s = exchanger.exchange(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + s);
}, "t1").start();
new Thread(()->{
String s = "T2";
try {
s = exchanger.exchange(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + s);
}, "t2").start();
}
}
执行结果:
t2 T1
t1 T2
Process finished with exit code 0
网友评论