Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Effective Java 輪読会 項目69-70

562 views

Published on

Published in: Technology
  • Login to see the comments

  • Be the first to like this

Effective Java 輪読会 項目69-70

  1. 1. Effective Java 輪読会 2014/03/05 開発部田中
  2. 2. 項目69 wait とnotify よりコンカレンシーユーティリ ティを選ぶ
  3. 3. コンカレンシーユーティリティ • waitとnotifyの代替として • コンカレントコレクションの並行性を排除 することはできない o コンカレントコレクションをロックしても効果なし • BlockingQueue, CowntDownLatchなど
  4. 4. ブロックする操作 • ex. BlockingQueue • 生産者-消費者キュー
  5. 5. シンクロナイザー • ex. CountDownLatch o 指定された数のスレッドが揃うのを待つ  ワーカースレッド: 3  タイマースレッド: 1 o 注意点として  エグゼキューターの許容スレッド数  Thread.currentThread().interrupt()  時間間隔の計測にはSystem.nanoTime()
  6. 6. wait とnotify • waitメソッドを使用する場合は、常にループ イディオムを用いる • 可能な限りコンカレンシーユーティリティ を使う
  7. 7. 項目70 スレッド安全性を文書化する
  8. 8. syncronized修飾子 • syncronized修飾子はAPIの一部ではない o スレッドセーフを保証する意味は含まれない
  9. 9. 安全性の段階 1. 不変 2. 無条件スレッドセーフ 3. 条件付きスレッドセーフ 4. スレッドセーフではない 5. スレッド敵対
  10. 10. 条件付きスレッドセーフを文書化 • どの一連の呼び出しが外部同期を必要とし、 どのロックを獲得しなければならないかを 明記する o ex. Collections.syncronizedMap().keySet()
  11. 11. プライベートロックオブジェクトイディオム • ロックオブジェクトをカプセル化すること で、サービス拒否攻撃を防ぐ • 無条件スレッドセーフのクラスに対しての み使用可能 • 継承のために設計されたクラスに対して有 効

×