Thread之Exchanger
来源:互联网 发布:ubuntu 商业版 编辑:程序博客网 时间:2024/05/18 13:28
在多线程并发时设置等待,等待另一线程运行到指定位置,并且交换数据。
使用构造函数Exchanger()创建对象。
在线程开始之后可以使用exchange(Object)方法控制当前线程等待,直到有另一个线程也调用该方法时交换数据,并继续执行。(此方法只支持两个线程之间的数据交换)
类似于买卖双方约定交易地点,其中一方先到之后等待另外一方,双方到齐之后一手交钱一手交货。
package com.milton.thread.util;import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;/** * @author milton * */public class ExchangerTest { public static void main(String[] args) { ExecutorService pool = Executors.newCachedThreadPool(); final Exchanger<String> exchanger = new Exchanger<String>(); pool.execute(new Runnable() { @Override public void run() { try { String data1 = "zs"; System.out.println("线程" + Thread.currentThread().getName()+ "把数据{" + data1 + "} 换出去"); String data2 = exchanger.exchange(data1); System.out.println("线程" + Thread.currentThread().getName() + "交换回来的数据为{" + data2 + "}"); TimeUnit.SECONDS.sleep((long) (Math.random() * 1000)); } catch (InterruptedException e) { e.printStackTrace(); } } }); pool.execute(new Runnable() { @Override public void run() { try { String data1 = "ls"; System.out.println("线程" + Thread.currentThread().getName() + "把数据{" + data1 + "}换出去"); String data2 = exchanger.exchange(data1); System.out.println("线程" + Thread.currentThread().getName()+ "交换回来的数据为{" + data2 + "}"); TimeUnit.SECONDS.sleep((long) (Math.random() * 1000)); } catch (InterruptedException e) { e.printStackTrace(); } } }); }}
执行结果:
线程pool-1-thread-1把数据{zs} 换出去
线程pool-1-thread-2把数据{ls}换出去
线程pool-1-thread-1交换回来的数据为{ls}
线程pool-1-thread-2交换回来的数据为{zs}
0 0
- Thread之Exchanger
- Java多线程之Exchanger
- Java线程之Exchanger
- JAVA多线程之Exchanger
- Java多线程之Exchanger
- java线程之Exchanger
- Java多线程之Exchanger
- java多线程之Exchanger
- Java高级之Exchanger
- Java并发之Exchanger
- java 多线程之Exchanger
- 多线程之Exchanger
- Exchanger
- Exchanger
- Exchanger
- Exchanger
- Exchanger
- Exchanger
- 日经社説 20150826 ネット国勢調査を円滑に
- Learning C/C++
- 内部类的实例化
- jxl(Java Excel API) 使用方法 【2】
- 常规功能和模块自定义系统(cfcmms)—003概述
- Thread之Exchanger
- 一、A*搜索算法
- 通过iOS 9 SFSafariViewController提供完整的Web浏览体验
- android 学习笔记 通知的使用
- ubuntu下安装deb文件
- UrlConnection 请求乱码的解决办法
- OCTEN vs intel DPDK
- 日经社説 20150826 企業自身で生産性高める働き方改革を
- 前端工程师需要掌握的技能