Exchanger的使用
两个线程可以交换对象的同步点。每个线程都在进入 exchange
方法时给出某个对象,并接受其他线程返回时给出的对象。
用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。
构造方法摘要 | |
---|---|
Exchanger() 创建一个新的 Exchanger。 |
1 package com.thread; 2 import java.util.concurrent.Exchanger; 3 import java.util.concurrent.ExecutorService; 4 import java.util.concurrent.Executors; 5 6 public class ExchangerTest { 7 8 public static void main(String[] args) { 9 ExecutorService service = Executors.newCachedThreadPool(); 10 final Exchanger exchanger = new Exchanger(); 11 service.execute(new Runnable(){ 12 public void run() { 13 try { 14 Thread.sleep((long)(Math.random()*10000)); 15 String data1 = "zxx"; 16 System.out.println("线程" + Thread.currentThread().getName() + 17 "正在把数据" + data1 +"换出去"); 18 String data2 = (String)exchanger.exchange(data1); 19 System.out.println("线程" + Thread.currentThread().getName() + 20 "换回的数据为" + data2); 21 }catch(Exception e){ 22 23 } 24 } 25 }); 26 service.execute(new Runnable(){ 27 public void run() { 28 try { 29 Thread.sleep((long)(Math.random()*10000)); 30 String data1 = "lhm"; 31 System.out.println("线程" + Thread.currentThread().getName() + 32 "正在把数据" + data1 +"换出去"); 33 String data2 = (String)exchanger.exchange(data1); 34 System.out.println("线程" + Thread.currentThread().getName() + 35 "换回的数据为" + data2); 36 }catch(Exception e){ 37 38 } 39 } 40 }); 41 } 42 }
运行结果如下:
线程pool-1-thread-1正在把数据zxx换出去 线程pool-1-thread-2正在把数据lhm换出去 线程pool-1-thread-1换回的数据为lhm 线程pool-1-thread-2换回的数据为zxx
我喜欢,驾驭着代码在风驰电掣中创造完美!我喜欢,操纵着代码在随必所欲中体验生活!我喜欢,书写着代码在时代浪潮中完成经典!每一段新的代码在我手中诞生对我来说就象观看刹那花开的感动!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步