线程之间交换数据

本文通过一个具体的Java示例代码展示了如何使用Exchanger类实现多线程间的同步数据交换。Exchanger允许成对的线程相互交换对象,适用于需要在特定线程间同步交换数据的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class ExchangerTest {


/**
* @exchanger.exchange(data1)只有两个线程同时到达了才能交换。多个线程之间交换时,先到的之间交换。
*/
public static void main(String[] args) {
           final Exchanger exchanger = new Exchanger();
           ExecutorService  es1 = Executors.newCachedThreadPool();
           es1.execute(new Runnable(){
          public void run(){
          String data1 = "data_1";
          try {
Thread.sleep(new Random().nextInt(5000));
//只有连个线程同时达到了才能执行
String data2 = (String)exchanger.exchange(data1);
System.out.println("data1"+"----"+data2);
} catch (InterruptedException e) {
e.printStackTrace();
}
         
          }
           });
           es1.execute(new Runnable(){
          public void run(){
          String data2 = "data_2";
          try {
Thread.sleep(new Random().nextInt(5000));
//只有连个线程同时达到了才能执行
String data1 =(String)exchanger.exchange(data2);
System.out.println("data2"+"----"+data1);
} catch (InterruptedException e) {
e.printStackTrace();
}
          }
           });
           es1.execute(new Runnable(){
          public void run(){
          String data3 = "data_3";
          try {
Thread.sleep(new Random().nextInt(5000));
//只有连个线程同时达到了才能执行
String dataX =(String)exchanger.exchange(data3);
System.out.println("data3"+"----"+dataX);
} catch (InterruptedException e) {
e.printStackTrace();
}
          }
           });
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值