本文共 1091 字,大约阅读时间需要 3 分钟。
Exchanger不会阻塞主线程的执行
Exchanger只支持两个线程之间的数据交换
两个线程之间无论谁先到达exchange都会阻塞,然后等待另一个线程也到达exchange方法。然后交换数据后继续执行。
下面来看一个简单的例子就会使用啦
package demo01;import java.util.ArrayList;import java.util.List;import java.util.concurrent.Exchanger;public class ExchangerTest{ public static void main(String[] args) { final Exchanger输出:thread1[zhang, xuan]
> exchanger = new Exchanger<>(); new Thread() { @Override public void run() { List list = new ArrayList<>(); list.add("li"); list.add("zi"); try { list = exchanger.exchange(list); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread1" + list); }; }.start(); new Thread() { @Override public void run() { List list = new ArrayList<>(); list.add("zhang"); list.add("xuan"); try { list = exchanger.exchange(list); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread2" + list); }; }.start(); } }
thread2[li, zi]
java.util.concurrent 包是多线程开发者的福音啊.