Java并发之Exchanger类

java

应用场景

如果两个线程在运行过程中需要交换彼此的信息,可以使用Exchanger这个类。

Exchanger为线程交换信息提供了非常方便的途径,它可以作为两个线程交换对象的同步点,只有当每个线程都在进入 exchange ()方法并给出对象时,才能接受其他线程返回时给出的对象。

使用方法

Exchanger的构造方法如下:

  • Exchanger(); //创建一个新的 Exchanger。

Exchanger用到的主要方法有:

  • exchange(V x); //等待另一个线程到达此交换点(除非它被中断),然后将给定的对象传送给该线程,并接收该线程的对象。

  • exchange(V x, long timeout, TimeUnit unit); // 等待另一个线程到达此交换点(除非它被中断,或者超出了指定的等待时间),然后将给定的对象传送给该线程,同时接收该线程的对象。

实例代码

package Exchanger;

import java.util.concurrent.Exchanger;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

public class Exechanger {

public static void main(String[] args) {

ExecutorService exec=Executors.newCachedThreadPool();

Exchanger<String> exchanger=new Exchanger<>();

new Thread() {

@Override

public void run() {

String data1="data1";

try {

System.out.println(Thread.currentThread().getName()+"交换前的数据:"+data1);

String data2=exchanger.exchange(data1);

System.out.println(Thread.currentThread().getName()+"交换后的数据:"+data2);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}.start();

new Thread() {

@Override

public void run() {

String data2="data2";

try {

System.out.println(Thread.currentThread().getName()+"交换前的数据:"+data2);

String data1=exchanger.exchange(data2);

System.out.println(Thread.currentThread().getName()+"交换后的数据:"+data1);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}.start();

}

}

以上是 Java并发之Exchanger类 的全部内容, 来源链接: utcz.com/z/390309.html

回到顶部