Java并发编程-Exchange

本文介绍了Java并发编程中的Exchange工具类,主要用于线程间的数据交换。Exchange提供了一个同步点,线程通过调用exchange()方法进行数据交换。Exchange可视为双向的SynchronousQueue,构造方法包括无参构造,主要方法有exchange(),允许线程在等待另一线程到达交换点时进行数据传输。文中还给出了一个示例,展示了如何在固定线程池中使用Exchange进行字符串数据交换。

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

1.简介

  Exchange位于java.util.concurrent包下面,主要是用于线程之间数据交换的工具类,经常用于管道设计和遗传算法中。Exchange提供了一个同步点,在这个同步点上,线程完成配对并进行数据的交换。第一个线程调用exchange()方法时传入对象,它会一直等待,直到第二个对象调用exchange()方法时,每个线程的exchange()方法将返回并且接收到匹配线程传入到exchange()方法中的对象,完成数据的交换。
  可以将Exchange看做是一个双向数据传输的SynchronousQueue。

2.介绍
2.1构造方法

——public Exchange(){}

  • 创建一个新的Exchange。
2.2 主要方法

——public V exchange(V x) throws InterruptedException{}

  • 等待另外一个线程到达此交换点(除非当前线程被中断),将给定的对象x传送给该线程,并且接收该线程的对象。

——public V exchange(V x) throws InterruptedException{}

  • 等待另外一个线程到达此交换点(除非当前线程被中断,或者超出了指定的等待时间),将指定的对象x传送给该线程,同时接收该线程的对象。
3.案例

创建固定线程池数量为2,两个线程以交换字符串数据为例,其中一个线程执行方法exchange()方法时,将等待,直到第二个线程执行exchange()方法,两个线程完成数据的交换。如果两个线程有一个没有执行exchange()方法,将会一直等待下去

public class ExChangeDemo {
  private static ExecutorService exec = Executors.newFixedThreadPool(2);
  //创建一个Exchange
  private static Exchanger<String> change = new Exchanger<>();
  public static void main(String[] args) {
    exec.execute(new Runnable() {
      public void run() {
        String A="change data--1";
        try {
          String B = change.exchange(A);
          System.out.println("Current Thread:"+Thread.currentThread().getName()+",After change:"+B);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    });
    exec.execute(new Runnable() {
      public void run() {
        String B="change data--2";
        try {
          String A=change.exchange(B);
          System.out.println("Current Thread:"+Thread.currentThread().getName()+",After change:"+A);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    });
    exec.shutdown();
  }
}

执行结果:
Current Thread:pool-1-thread-2,After change:change data--1
Current Thread:pool-1-thread-1,After change:change data--2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值