1. 程式人生 > >java同步器——4——筆記

java同步器——4——筆記

比如生活中兩個人,一個人有零食,另一個人有錢,他們兩個想等價交換,對好口號在某個地方相見,一個人先到了之後,必須等另一個人帶著需要的東西來了之後,才能開始hi交換。

程式碼如下:

import java.util.concurrent.Exchanger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class ExchangeTest {
	public static void main(String[] args) {
		ExecutorService service =Executors.newCachedThreadPool();
		final Exchanger exchanger = new Exchanger();
		service.execute(new Runnable() {
			
			@Override
			public void run() {
				try{
					String data1 = "零食";
					System.out.println("執行緒"+Thread.currentThread().getName()+
							"正在把資料 "+data1+" 換出去");
					Thread.sleep((long)Math.random()*10000);
					String data2 = (String)exchanger.exchange(data1);
					System.out.println("執行緒 "+Thread.currentThread().getName()+
							"換回的資料為 "+data2);
				}catch(Exception e){
					e.printStackTrace();
				}
				
			}
		});
		
		service.execute(new Runnable() {
			
			@Override
			public void run() {
				try{
					String data1 = "錢";
					System.out.println("執行緒"+Thread.currentThread().getName()+
							"正在把資料 "+data1+" 交換出去");
					Thread.sleep((long)(Math.random()*10000));
					String data2 =(String)exchanger.exchange(data1);
					System.out.println("執行緒 "+Thread.currentThread().getName()+
							"交換回來的資料是: "+data2);
				}catch(Exception e){
					e.printStackTrace();
				}
				
				
			}
		});
	}
}
執行結果:

控制檯輸出:

執行緒pool-1-thread-1正在把資料 零食 換出去
執行緒pool-1-thread-2正在把資料 錢 交換出去
執行緒 pool-1-thread-1換回的資料為 錢
執行緒 pool-1-thread-2交換回來的資料是: 零食