zoukankan      html  css  js  c++  java
  • JAVA线程同步辅助类Exchanger-交换

    可以在对中对元素进行配对和交换的线程的同步点。每个线程将条目上的某个方法呈现给 exchange 方法,与伙伴线程进行匹配,并且在返回时接收其伙伴的对象。Exchanger 可能被视为 SynchronousQueue 的双向形式。Exchanger 可能在应用程序(比如遗传算法和管道设计)中很有用。

    import java.util.Random;
    import java.util.concurrent.Exchanger;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    public class ExchangerTest {
        public static void main(String[] args) {
            ExecutorService service = Executors.newCachedThreadPool();
            final Exchanger<String> exchanger = new Exchanger<String>();
            service.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        String data1 = "duwenlei";
                        System.out.println("线程"+Thread.currentThread().getName()+"要换的数据为"+data1);
                        System.out.println("线程"+Thread.currentThread().getName()+"等待对方");
                        Thread.sleep(new Random().nextInt(10000));
                        String data2 = exchanger.exchange(data1);    //开始互换数据
                        System.out.println("线程"+Thread.currentThread().getName()+"互换后的数据为"+data2);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
            service.execute(new Runnable() {
                @Override
                public void run() {
                    try {
                        String data1 = "shenjing";
                        System.out.println("线程"+Thread.currentThread().getName()+"要换的数据为"+data1 );
                        System.out.println("线程"+Thread.currentThread().getName()+"等待对方");
                        Thread.sleep(new Random().nextInt(10000));
                        String data2 = exchanger.exchange(data1);
                        System.out.println("线程"+Thread.currentThread().getName()+"互换后的数据为"+data2);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
            service.shutdown();
        }
    }

     

  • 相关阅读:
    把旧表中数据加入到新表中
    mysql字段-创建时间与更新时间
    springboot-maven依赖源
    刚刚下载的IDEA打不开
    matplotlib-实战01
    实战1-数据清理
    python函数(三)
    交换机配置DHCP中继
    python函数(二)
    用事实说话
  • 原文地址:https://www.cnblogs.com/duwenlei/p/5126447.html
Copyright © 2011-2022 走看看