public class Exchanger<V>extends Object
可以在對中對元素進行配對和交換的線程的同步點。每個線程將條目上的某個方法呈現給 exchange
方法,與伙伴線程進行匹配,并且在返回時接收其伙伴的對象。Exchanger 可能被視為 SynchronousQueue
的雙向形式。Exchanger 可能在應用程序(比如遺傳算法和管道設計)中很有用。?
實例:
import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 線程間的交換數據
*
* @author wangyi
* @version 1.0 <br />
* <a href="www.baidu.com">百度一下</a>
*/
public class ExchagerTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
Exchanger<String> exchange = new Exchanger<String>();
service.execute(new MyThread<String>("愛情", exchange, "愛情"));
service.execute(new MyThread<String>("關曉彤", exchange, "關曉彤"));
service.shutdown();
}
static class MyThread<T> extends Thread {
private T data;
private Exchanger<T> exchange;
public MyThread(T data, Exchanger<T> exchange, String name) {
this.data = data;
this.exchange = exchange;
setName(name);
}
@Override
public void run() {
System.out.println(getName() + "正準備把" + data + "交換出去");
try {
Thread.sleep((int) (Math.random() * 10000));
T datas = exchange.exchange(data);
System.out.println(getName() + "換回的為:" + datas);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}