2014年11月29日土曜日

Java 非同期処理の同期をとる CountDownLatch

Java 非同期処理の同期をとる


java.util.concurrentパッケージにはJavaの同期・非同期処理を実装する上で便利なクラスある。

その中でも簡単に使えるのが CountDownLatch である。

□CountDownLatch


他スレッドでの操作完了を待機する同期支援クラス

CountDownLatchはON/OFF機能をもったLatch(ドア、掛け金)である。

ex) 待ち合せたい非同期処理の数Nの場合

// インスタンス生成
final CountDownLatch latch = new CountDownLatch(N);
// 待ち合せ実行(メインスレッドで実行しないこと)
try {
    latch.await();
} catch (InterruptedException e) {
    e.printStackTrace();
}

CountDownLatchインスタンスを非同期処理のスレッドに渡す。

非同期処理側

ex)
latch.countDown();

【Notice】
latch.countDown()とlatch.await()を呼び出すスレッドとタイミングに注意すること。
latch.countDown()を呼び出すスレッドが起動したあと、latch.await()を呼び出す方が安全。

Google:
http://developer.android.com/intl/ja/reference/java/util/concurrent/CountDownLatch.html

Androidでも共通して使用できる。というか個人的にはAndroidでしか使っていない。

0 件のコメント:

コメントを投稿