Javaプログラミングスレッド同期ツールExchangeの使用例解析


本論文では主にJavaプログラミングスレッド同期ツールExchangeの使用を検討しています。
2つのスレッドが実行中にお互いの情報を交換する必要がある場合、例えば、1つのデータまたは使用空間は、Exchangeというクラスを使用する必要があります。Exchangeは、スレッド交換のための情報を提供しています。2つのスレッド交換オブジェクトの同じステップとして、スレッドごとにexchange ()メソッドに進み、オブジェクトを与える場合にのみ、他のスレッドの戻り時に与えられたオブジェクトを受け入れることができます。
毎回2つのスレッドしかデータを交換できません。複数のスレッドがあれば、2つだけデータを交換できます。以下は分かりやすい例を見ます。片手にお金を渡します。

public class ExchangerTest {
	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));
					//         exchange   ,     ,           。        
					String data2 = (String)exchanger.exchange(data1);
					System.out.println("  " + Thread.currentThread().getName() + 
					          "       " + data2);
				}
				catch(Exception e){
				}
				finally {
					service.shutdown();
					System.out.println("    ,     !");
				}
			}
		}
		);
		//           
		service.execute(new Runnable(){
			@Override
			      public void run() {
				try {
					String data1 = "300 ";
					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() + 
					          " 300    " + data2);
				}
				catch(Exception e){
				}
				finally {
					service.shutdown();
					System.out.println("    ,       !");
				}
			}
		}
		);
	}
}
コードの中から二人が麻薬を取引しているところを見たようです。取引の結果を見てみます。
スレッドpool-1-thread-1は麻薬のヘロインを持ち出しています。
スレッドpool-1-thread-2は300万を取り出しています。
スレッドpool-1-thread-2は300万でヘロインを取得しました。
スレッドpool-1-thread-1はヘロインで300万を換えました。
取引が終わったら、ヘロインを持って速く走れ!
取引が終わったら、お金を持って速く走れ。
走るのは速いですが、運行結果から見て、確かにデータの交換を実現しました。これは基本的なタイプのデータを交換するだけです。本当の用途はこれに限らないです。例えば、オブジェクトを交換することができます。これは有用です。JDK公式は高級な応用に言及しました。
Exchangeを使用して、オンラインの間でバッファを交換しますので、必要に応じて、バッファを充填したスレッドは新しい空になったバッファを取得して、埋めたバッファを空にしたバッファに渡すスレッドです。
これは実際の状況によって、思想は上と同じで、実際には必ず緩衝区の種類を定義して、そして二つのスレッドの間で交換するのはこの緩衝区の種類でいいです。Exchangeの使用はここまでにまとめましょう。
締め括りをつける
以上がJavaプログラミングスレッド同期ツールExchangeの使用例解析のすべてです。興味のある方は引き続き当駅の他のテーマを参照してください。友達のサポートに感謝します。