Exchanger类用于两个线程之间的信息交换。
举一个现场的例子:
import java.util.concurrent.Exchanger;
public class ExchangerTest {
static Exchanger<String> exchanger = new Exchanger<>();
public static void main(String[] args) {
new Thread(()->{
String s = "thread-1";
try {
s = exchanger.exchange(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+s);
},"t1").start();
new Thread(()->{
String s = "thread-2";
try {
s = exchanger.exchange(s);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" "+s);
},"t2").start();
}
}
输出结果:
t1 thread-2
t2 thread-1
如果屏蔽上面一个线程,是不会执行完毕的,必须等待下一个exchanger线程的到来,才会结束。
Exchanger是一个同步工具类,用于在两个线程之间进行数据交换。在示例中,创建了两个线程t1和t2,每个线程将自身的标识字符串传入Exchanger,最终实现线程间的互换。当一个线程调用exchange方法时,它会等待另一个线程到达并完成交换,确保数据正确传递。若缺少其中一个线程,交换操作不会完成,体现了其同步特性。
318

被折叠的 条评论
为什么被折叠?



