12

Click here to load reader

Effective Java 輪読会 項目69-70

Embed Size (px)

Citation preview

Page 1: Effective Java 輪読会 項目69-70

Effective Java 輪読会

2014/03/05

開発部 田中

Page 2: Effective Java 輪読会 項目69-70

項目69

wait と notify よりコンカレンシーユーティリティを選ぶ

Page 3: Effective Java 輪読会 項目69-70

コンカレンシーユーティリティ

• waitとnotifyの代替として

• コンカレントコレクションの並行性を排除することはできないo コンカレントコレクションをロックしても効果なし

• BlockingQueue, CowntDownLatchなど

Page 4: Effective Java 輪読会 項目69-70

ブロックする操作

• ex. BlockingQueue

• 生産者-消費者キュー

Page 5: Effective Java 輪読会 項目69-70

シンクロナイザー

• ex. CountDownLatch

o 指定された数のスレッドが揃うのを待つ

ワーカースレッド: 3

タイマースレッド: 1

o 注意点として

エグゼキューターの許容スレッド数

Thread.currentThread().interrupt()

時間間隔の計測にはSystem.nanoTime()

Page 6: Effective Java 輪読会 項目69-70
Page 7: Effective Java 輪読会 項目69-70

wait と notify

• waitメソッドを使用する場合は、常にループイディオムを用いる

• 可能な限りコンカレンシーユーティリティを使う

Page 8: Effective Java 輪読会 項目69-70

項目70

スレッド安全性を文書化する

Page 9: Effective Java 輪読会 項目69-70

syncronized修飾子

• syncronized修飾子はAPIの一部ではないo スレッドセーフを保証する意味は含まれない

Page 10: Effective Java 輪読会 項目69-70

安全性の段階

1.不変

2.無条件スレッドセーフ

3.条件付きスレッドセーフ

4.スレッドセーフではない

5.スレッド敵対

Page 11: Effective Java 輪読会 項目69-70

条件付きスレッドセーフを文書化

• どの一連の呼び出しが外部同期を必要とし、どのロックを獲得しなければならないかを明記するo ex. Collections.syncronizedMap().keySet()

Page 12: Effective Java 輪読会 項目69-70

プライベートロックオブジェクトイディオム

• ロックオブジェクトをカプセル化することで、サービス拒否攻撃を防ぐ

• 無条件スレッドセーフのクラスに対してのみ使用可能

• 継承のために設計されたクラスに対して有効