1. Exchanger
在两个线程之间交换数据
class TThread implements Runnable{
private Exchanger<String> exchanger;
public TThread(Exchanger<String> exchanger){
this.exchanger = exchanger;
}
public void run() {
String name = Thread.currentThread().getName();
try {
// name 当前线程"发送"的数据,由其他线程"接收"
// result 当前线程"接收"的数据,有其他线程"发送"
String result = exchanger.exchange(name);
System.out.println(name + "\t:" + result);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class ExchangeTest {
private static Exchanger<String> exchanger = new Exchanger<String>();
public static void main(String[] args){
TThread p = new TThread(exchanger);
new Thread(p).start();
new Thread(p).start();
// 总线程应为偶数个,否则最后一个线程将一直等待
new Thread(p).start();
new Thread(p).start();
}
}
2. 同步容器