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<List<String>> exchanger = new Exchanger<>();
new Thread()
{
@Override
public void run()
{
List<String> 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<String> 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();
}
}
输出:thread1[zhang, xuan]
thread2[li, zi]
java.util.concurrent 包是多线程开发者的福音啊.