Exchanger類調試

一Exchanger 

  1. java.util.concurrent包中
  2. 只可以用於兩個線程之間交換信息。

二案例


public class ExchangerTest {

	public static void main(String[] args) {
		ExecutorService service = Executors.newCachedThreadPool();
	 		Exchanger exchanger = new Exchanger();
		service.execute(new Runnable(){
			public void run() {
				try {				

					String data1 = "A";
					System.out.println(Thread.currentThread().getName() +	"正在把數據" + data1 +"換出去");
					Thread.sleep((long)(Math.random()*3000));

					//線程交換數據
					String data2 = (String)exchanger.exchange(data1);
					System.out.println(Thread.currentThread().getName() + "換回的數據爲" + data2);

				}catch(Exception e){
					
				}
			}	
		});
		service.execute(new Runnable(){
			public void run() {
				try {				

					String data1 = "B";
					System.out.println(Thread.currentThread().getName() + 	"正在把數據" + data1 +"換出去");

					Thread.sleep((long)(Math.random()*3000));
					//線程交換數據
					String data2 = (String)exchanger.exchange(data1);
					System.out.println(Thread.currentThread().getName() + "換回的數據爲" + data2);

				}catch(Exception e){
					
				}				
			}	
		});		
	}
}

三結果分析

pool-1-thread-1正在把數據A換出去
pool-1-thread-2正在把數據B換出去

---解釋

2個線程都在這裏等待3秒後纔開始交換數據

---解釋
pool-1-thread-2換回的數據爲A
pool-1-thread-1換回的數據爲B

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章