記事「http://www.ibm.com/developerworks/java/library/j-jtp10264/」を読んでいます。「Lockフレームワークは同期の互換性のある置き換えです」と述べました。私は、リエントラントロックを使用することによって、メソッド間でロックを保持し、一定の時間(ロックされたブロック(または)メソッドを使用することはできません)ロックを待機できることを理解しました。私の疑問は、アプリケーションをリエントラントロックの同期メカニズムで置き換えることが可能なのでしょうか?は、再入可能なロックは同期の完全な置き換えですか?
たとえば、すべてのpush、pop、getTopメソッドが同期するスレッドセーフスタックデータ構造を実装したいので、マルチスレッド環境では、一度に1つのスレッドだけが1つの同期メソッドにアクセスできますあるスレッドがpushメソッドを使用している場合、他のスレッドはpushクラス、popクラス、getTopクラス(またはその他のStackクラスの同期メソッド)にアクセスできません。再入可能ロックを使用して同じスレッドセーフスタックデータ構造を実装することは可能ですか?可能であれば、これを理解するための例を提供してください。
のJava 5以降synchronized'文 'には多くの選択肢があります。 「ロック」だけでなく、あなたの場合は、おそらく、ホイールを再発明するのではなく、 'java.util.concurrent'パッケージで同期化されたコレクションを活用したいと思うでしょう。 – Mena
ええ。私は同時収集について知っていますが、私の質問は、ロックフレームワークを使用して完全なスレッドセーフなデータ構造を実装できるかどうかです。 –
あなたは 'Lock'ではできないものの、' synchronized'でできることは、プールされたオブジェクトを通して乱用します。おそらく全体的に悪いことではないでしょう。 – biziclop