五、Exchange 交换者
Exchanger 一个用于线程协作的工具类,使用他进行线程间的数据交换。通过调用exchange 方法来交换数据,同时exchang方法具有阻塞功能,若线程A执行到了exchange方法就会阻塞,就必须等到线程B也到达exchange方法,两者数据进行交换才会继续执行下去;
Doug Lea 给出的代码示例
随意写了个测试代码,因为实在是少用到,知道即可
import java.util.concurrent.Exchanger;
public class ExchangeTest {
Exchanger<Integer> exchanger = new Exchanger<Integer>();
class FillingLoop implements Runnable {
public void run() {
int a = 666;
try {
a = exchanger.exchange(a);
System.out.println("a:"+a);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class EmptyingLoop implements Runnable {
public void run() {
int b = 999;
try {
b = exchanger.exchange(b);
System.out.println("b:"+b);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void start() {
new Thread(new FillingLoop()).start();
new Thread(new EmptyingLoop()).start();
}
public static void main(String[] args) {
ExchangeTest e = new ExchangeTest();
e.start();
}
}