13____java线程同步工具类之线程数据交换(Exchanger)
2014-03-13 11:48
701 查看
Exchanger也属于java5并发库中。所实现的功能是线程间的数据交换。但是需要注意的是,只能是两个线程的数据交换。
当某一个线程运行Exchanger的exchange()方法后,说明交换状态准备完毕,然后进入阻塞状态,等待另外一个线程调用exchange()方法。然后两者交换数据后继续运行。有点一手交钱一手交货的意思。
例子:
许阳拥有五元钱
商店拥有beverage
开始交易......
商店得到:五元钱
许阳得到beverage
当某一个线程运行Exchanger的exchange()方法后,说明交换状态准备完毕,然后进入阻塞状态,等待另外一个线程调用exchange()方法。然后两者交换数据后继续运行。有点一手交钱一手交货的意思。
例子:
public class ThreadExchangerTest { public static void main(String[] args) { Exchanger<String> ex = new Exchanger<String>(); new Thread(new Buyer(ex),"许阳").start(); new Thread(new Saller(ex),"商店").start(); } static class Buyer implements Runnable{ private Exchanger<String> ex; public Buyer(Exchanger<String> ex) { super(); this.ex = ex; } public void run() { try { String money = "五元钱"; System.out.println(Thread.currentThread().getName()+"拥有"+money); Thread.sleep(1000); System.out.println("开始交易......"); String busniess = (String)ex.exchange(money); System.out.println(Thread.currentThread().getName()+"得到"+busniess); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } static class Saller implements Runnable{ private Exchanger<String> ex; public Saller(Exchanger<String> ex) { super(); this.ex = ex; } public void run() { try { String busniess = "beverage"; System.out.println(Thread.currentThread().getName()+"拥有"+busniess); String money = ex.exchange(busniess); System.out.println(Thread.currentThread().getName()+"得到:"+money); } catch (InterruptedException e) { e.printStackTrace(); } } } }运行后结果:
许阳拥有五元钱
商店拥有beverage
开始交易......
商店得到:五元钱
许阳得到beverage
相关文章推荐
- 多线程编程13-----Exchanger同步工具类实现两线程数据交换
- Java并发工具类(四):线程间交换数据的Exchanger
- Java并发工具类之线程间数据交换工具Exchanger
- Exchanger——Java两个线程间交换数据的工具类
- 同步工具之Exchanger实现线程间的数据交换
- Java多线程/并发25、Exchanger线程数据交换
- java 线程间交换数据的Exchanger
- Java多线程与并发库高级应用之线程数据交换Exchanger
- java多线程-Thread两个线程交换数据Exchanger
- java学习——使用Exchanger实现两个线程间的数据交换
- 并发工具类(四)线程间的交换数据 Exchanger
- JAVA中的并发工具类(四)---线程间交换数据的Exchanger类
- JAVA线程同步辅助类Exchanger-交换
- Java Exchanger(两线程交换数据)
- Exchanger两个线程之间交换数据
- Java 线程第三版 第三章数据同步 读书笔记
- java线程研究---(7)Thread同步:多线程数据共用会产生问题
- Exchanger:线程交换数据
- Java线程同步锁解决共享数据安全
- Exchanger: 两个线程 间 交换 数据