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.
Upcoming SlideShare
サイボウズLiveの開発を支えるSeleniumテスト
Next
Download to read offline and view in fullscreen.

10

Share

Download to read offline

真にスレッドセーフなHash mapとは #渋谷java

Download to read offline

真にスレッドセーフなHash mapとは #渋谷java

  1. 1. 真にスレッドセーフな HashMapとは 2013/11/16 第四回 #渋谷java せとあずさ♂
  2. 2. • • • • @setoazusa http://blog.fieldnotes.jp/ #tddbc 横浜(2011~2013) #agilesamurai #横浜道場 • • • • #yokohamarb 最近、MacからWindows8に乗り換えました チャンキヨかわいいよチャンキヨ miwaは自慢の妹です
  3. 3. スレッドセーフとは…? • クラスがスレッドセーフであるかどうか ということは、そのクラスが使われるコ ンテキストに強く依存します
  4. 4. Java並行処理プログラミング読んでください http://www.amazon.co.jp/dp/4797337206/
  5. 5. スレッドセーフなHashMap? • ConcurrentHashMap使えばいいんじゃ ね?
  6. 6. ConccurentHashMapはHashMap ではありません!
  7. 7. すなわち map.put(“key”, null); HashMap → そのまま通す ConccurentHashMap → ぬるぽ
  8. 8. これはバグではありません http://docs.oracle.com/javase/jp/7/api/java/util/Map.html#put%28K,%20V%29
  9. 9. • やむを得ないので、 Collections#synchronizedMapを使うわ けですが…
  10. 10. • synchronizedMapって、 iterator(foreach)を回す場合は呼び出し 元で同期する必要があるじゃないです か?
  11. 11. • 呼び出し元でどうやっても同期できない ケースが1つだけあります。
  12. 12. それはシリアライズ
  13. 13. どうする? • privateだから、継承できない • 呼び出し元は 標準APIの中
  14. 14. どんなケースでひっかかったのか • WebアプリのHttpSessionにHashMapを 格納していて、 • Tomcatのセッションクラスタリングがレ プリケーションのためにHashMapをシリ アライズして、 • そのシリアライズの最中にリクエストか らの処理(シリアライズとは別スレット)が HashMapにput
  15. 15. 結論 • スレッドごとに、オブジェクトを分割す ればいい
  16. 16. https://gist.github.com/azusa/7052618
  17. 17. まとめ • クラスがスレッドセーフかどうかはコン テキストに依存するということを理解し ない人は、豆腐の角に頭をぶつけて(ry • コレクションAPIには地雷があります • スケールアウトの容易さという点につい て、railsが羨ましいです • Java並行処理プログラミング読みましょ う
  • TakeshiWatanabe2

    Nov. 25, 2013
  • tarchan

    Nov. 22, 2013
  • tm8r

    Nov. 17, 2013
  • matsumana0101

    Nov. 17, 2013
  • yoshihikoikeuchi7

    Nov. 16, 2013
  • takehiroinoue127

    Nov. 16, 2013
  • toenobu

    Nov. 16, 2013
  • TakeshiTajima

    Nov. 16, 2013
  • esehara

    Nov. 16, 2013
  • yukung

    Nov. 16, 2013

Views

Total views

14,403

On Slideshare

0

From embeds

0

Number of embeds

522

Actions

Downloads

14

Shares

0

Comments

0

Likes

10

×