该类是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个通不见,两个线程可以交换彼此间的数据。这两个线程通过exchange方法交换数据:如果第一个线程执行exchange(),它会一直等待第二个线程exchange(),当两个线程达到同步点,这两个线程就可以交换线程。
虽然我不知道这个类有啥作用(ε=ε=ε=┏(゜ロ゜;)┛
但是书上说可以用于遗传算法、校对工作:
Exchanger<String> exchanger = new Exchanger<>();
new Thread(() -> {
String dataOfAThread = Thread.currentThread().getName() + "-----A的数据";
try {
String resultOfBThread = exchanger.exchange(dataOfAThread);
System.out.println(Thread.currentThread().getName() + "-------> " + resultOfBThread);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(() -> {
String dataOfBThread = Thread.currentThread().getName() + "-----B的数据";
try {
String resultOfAThread = exchanger.exchange(dataOfBThread);
System.out.println(Thread.currentThread().getName() + "-------> " + resultOfAThread);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
最后输出:
Thread-1-------> Thread-0-----A的数据
Thread-0-------> Thread-1-----B的数据
类似于游戏中的物品交易,双方都确认之后(运行到某一个点上,一方不同意就卡着),交换物品