美文网首页
两个线程进行数据交换的Exchanger

两个线程进行数据交换的Exchanger

作者: 笨笨哒2018 | 来源:发表于2018-08-23 14:54 被阅读0次

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

public class ExchangerDemo {
    
    public static void main(String[] args) {
        ExecutorService executor = Executors.newCachedThreadPool();
        
        final Exchanger exchanger = new Exchanger();
        executor.execute(new Runnable() {
            String data1 = "克拉克森";
            
 
            @Override
            public void run() {
                nbaTrade(data1, exchanger);
            }
        });
        
 
        executor.execute(new Runnable() {
            String data1 = "格里芬";
 
            @Override
            public void run() {
               
                nbaTrade(data1, exchanger);
            }
        });
        

        executor.shutdown();
    }
 
    private static void nbaTrade(String data1, Exchanger exchanger) {
        try {
            System.out.println(Thread.currentThread().getName() + "在交易截止之前把 " + data1 + " 交易出去");
            String data2 = (String) exchanger.exchange(data1);
            System.out.println(Thread.currentThread().getName() + "交易得到" + data2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
pool-1-thread-1在交易截止之前把 克拉克森 交易出去
pool-1-thread-2在交易截止之前把 格里芬 交易出去
pool-1-thread-2交易得到克拉克森
pool-1-thread-1交易得到格里芬

相关文章

网友评论

      本文标题:两个线程进行数据交换的Exchanger

      本文链接:https://www.haomeiwen.com/subject/ivtmiftx.html