Exchanger

Exchanger主要用于两个线程间的数据交换,属于JDK1.5新增的并发工具类。

Exchanger提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange()方法交换数据,如果第一个线程先执行exchange()方法,它会一直等待第二个线程也执行exchange方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。

对于以上叙述先具备一个基础的认识即可,以下为示例代码

import java.util.concurrent.Exchanger;

public class UseExchange {

    private static String str1="资源1";
    private static String str2="资源2";

    //构建资源交换对象
    private static final Exchanger stringExchange=new Exchanger();

    public static void main(String[] args){
        //第一个线程
        new Thread(new Runnable() {
            public void run() {
                System.out.println(Thread.currentThread().getName()+"初始占用资源:"+str1);
                try{
                    String newStr=stringExchange.exchange(str1);
                    System.out.println(Thread.currentThread().getName()+"交换资源:"+newStr);
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }).start();

        //第二个线程
        new Thread(new Runnable() {
            public void run() {
                System.out.println(Thread.currentThread().getName()+"初始占用资源:"+str2);
                //资源交换,将资源交给其他线程和获取到其他线程交换过来的资源
                try{
                    String newStr=stringExchange.exchange(str2);
                    System.out.println(Thread.currentThread().getName()+"交换资源:"+newStr);
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }).start();
    }
}

运行结果:

Exchanger_第1张图片

你可能感兴趣的:(并发编程)