| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
10年前发布

java线程中Exchanger使用

有时我们需要对元素进行配对和交换线程的同步点,使用exchange方法 返回其伙伴的对象,这时我们就需要使用线程类中的Exchanger类了,

我通过一个实例 来简单说明一下他的使用方法及其作用:

    import java.util.concurrent.Exchanger;        import java.util.concurrent.ExecutorService;        import java.util.concurrent.Executors;                        public class TestExchanger {                    /**            * @param args            */            public static void main(String[] args) {                 ExecutorService executor = Executors.newCachedThreadPool();                 final Exchanger<String> exchanger = new Exchanger<String>();                 executor.execute(new Runnable() {                    String data1 = "abc";                    @Override                    public void run() {                        try {                            System.out.println(Thread.currentThread().getName() +"正在把数据 "+ data1+ " 交换出去" );                            Thread.sleep((long) (Math.random()*1000));                                                        String data2 = (String) exchanger.exchange(data1);                            System.out.println(Thread.currentThread().getName() + "交换数据 到  "+ data2);                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                });                                  executor.execute(new Runnable() {                     String data1 = "def";                    @Override                    public void run() {                        try {                            System.out.println(Thread.currentThread().getName() +"正在把数据 "+ data1+ " 交换出去" );                            Thread.sleep((long) (Math.random()*1000));                                                        String data2 = (String) exchanger.exchange(data1);                            System.out.println(Thread.currentThread().getName() + "交换数据 到  "+ data2);                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                    }                });            }                }  

执行完毕之后;你会发现数据完成交换

pool-1-thread-1正在把数据 abc 交换出去
pool-1-thread-2正在把数据 def 交换出去
pool-1-thread-2交换数据 到  abc
pool-1-thread-1交换数据 到  def

 本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
 转载本站原创文章,请注明出处,并保留原始链接、图片水印。
 本站是一个以用户分享为主的开源技术平台,欢迎各类分享!
 本文地址:https://www.open-open.com/lib/view/open1418027674511.html
线程 Java开发