
Exchanger的使用
概述:
Exchanger可以让两个线程之间进行数据交换。

使用:
使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
package T616;
import java.util.concurrent.Exchanger; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;
public class exchangerTest { public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
Exchanger exchanger = new Exchanger(); service.execute(new Runnable() { @Override public void run() { dow(exchanger, "date1"); } }); service.execute(new Runnable() { @Override public void run() { dow(exchanger, "date2"); } }); service.shutdown(); }
public static void dow(Exchanger exchanger, String date) { try { System.out.println(Thread.currentThread().getName() + "-----" + date); Thread.sleep((long) (Math.random() * 1000)); String date1 = (String) exchanger.exchange(date); System.out.println(Thread.currentThread().getName() + "-----" + date1); } catch (Exception e) { e.printStackTrace(); } } }
|
结果:
pool-1-thread-1—–date1
pool-1-thread-2—–date2
pool-1-thread-1—–date2
pool-1-thread-2—–date1
分析:
线程1执行exchange方法后线程阻塞,等线程2当线程2执行exchange方法时,线程数据交换。
近期评论