今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

developerWorks新着記事

XDocletでコードの肥大化を防ぐ
[日本語] [英語(原文)]
Javaの理論と実践: JDK 5.0における、より柔軟でスケーラブルなロック
[日本語] [英語(原文)]
今回の後者の記事は、ReentrantLock を解説している。でも安易に使うべきではないことを強調している。

繰り返しますが、これは上級ユーザー向けの上級ツールなのです。(そして真に上級のユーザーであれば、単純なツールでは不適当だと確認できるまでは、一番単純なツールを好むものです。)いつものことですが、まず正しく動くようにし、その後で、さらに早くすべきかどうかを考えるべきです。

まさしくそのとおり。Java の同期化は、同期オブジェクト単位で排他が可能なので、ReentrantLock が必要となることはほとんどない。
この記事は、

  • どうしてもsynchronizedブロックでは対応できない特別な場合
  • 排他がパフォーマンスのボトルネックとなっている場合

にだけ、ReentrantLockを使用し、それ以外では使うな、という意味に読み取るべきだろう。
つまり、この記事は ReentrantLock が必要な状況に追い込まれている人だけが読めばいい。それ以外の人は読まなくていい。必要になったとき、この記事があることを思い出せばよい。
ワタシも、最初に見出しを追っていたときに「どういう場合にsynchronizedではなくReentrantLockを選択すべきなのか」ってのに目が止まり、そこを最初に読んだ。で、上に引用したのを見つけた時点で読むのをやめた。