• 勉強会でたまたま見つけたリンク

https://www-06.ibm.com/jp/developerworks/java/041112/j_j-jtp10264.html

ではどういう場合にReentrantLockを使うべきなのでしょう。
答えは極めて単純です。synchronizedではできない何か、
たとえばタイム・ロック・ウエイト(timed lock waits)、
割り込み可能ロック・ウエイト(interruptible lock waits)、
非ブロック構造化ロック(non-block-structured locks)、
複数の条件変数、あるいはロック・ポーリング(lock polling)などが、
実際に必要な場合に使えばよいのです。
ReentrantLockにはスケーラビリティの利点もあるので、
高度な競合が見られる状況が実際にあるならば、ReentrantLockを使うべきです。

timed lock waits、interruptible lock waitsとか全然分からん。どこが簡単なのか。。
どうやら有名な並列アルゴリズムらしい。アルゴリズムねぇ。。

https://www-06.ibm.com/jp/developerworks/java/041203/j_j-jtp11234.html
Lock-freeアルゴリズムとwait-freeアルゴリズムについての説明あり。

https://www-06.ibm.com/jp/developerworks/java/060519/j_j-jtp04186.shtml
http://www-06.ibm.com/jp/developerworks/java/060616/j_j-jtp05236.shtml

ちなみに全ての記事を「concurrency in practice」のBrian Goetzが書いてるから読む価値あり。

http://www-06.ibm.com/jp/developerworks/java/040416/j_j-jtp02244.html
http://www-06.ibm.com/jp/developerworks/java/040514/j_j-jtp03304.html
Javaのメモリモデルについて。Brian Goetzはこんなこともやっているのか。。すげーな。

  • volatileについて

http://proger.blog10.fc2.com/blog-entry-20.html
組み込み系のプログラミングでも重要らしい。
コンパイラの最適化手法って重要なんだなぁって思った。


  • 並列プログラミングの名著らしい。たぶん買うだろうな

Concurrent Programming in Java¿: Design Principles and Patterns (3rd Edition) (Java Series)

Concurrent Programming in Java¿: Design Principles and Patterns (3rd Edition) (Java Series)