zoukankan      html  css  js  c++  java
  • Java并发之Exchanger类

    应用场景

    如果两个线程在运行过程中需要交换彼此的信息,可以使用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();
        }
    }
    
  • 相关阅读:
    tomcat配置多实例
    内存溢出的三种情况及解决办法分析
    se最佳设置
    Squid 3.1.7通过mysql_auth方式认证
    java在linux下显示中文解决方法
    AD域批量的导入导出账号 转
    JSP技术分享:常用禁止缓存的四种方法
    大幅优化myeclipse的速度&关闭自动更新
    迷你图标集大集合:5000+ 30套免费的图标(不得不下,设计必备)
    【转】开发实战:舍得网44587行代码开发经验
  • 原文地址:https://www.cnblogs.com/infoflow/p/7535844.html
Copyright © 2011-2022 走看看