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