- PR -

synchronizedブロックについて

1
投稿者投稿内容
masa
常連さん
会議室デビュー日: 2003/01/14
投稿数: 37
投稿日時: 2004-03-24 14:43
同期処理についてお聞きいたします。

下記のようなコードにおいて、
「A〜B間はひとつのスレッドしか処理されない」
という認識は正しいでしょうか?

SingletonBean bean = SingletonBean.getInstance(); //唯一のインスタンスを返す。
synchronized (bean) { // --- A

 //何らかの処理を記述
 //たとえば以下のような処理を記述する
 bean.insertSQL();
 this.insertSQL();

} // --- B

また、もし上記の認識が正しい場合、
以下のいずれかの処理は可能でしょうか?

処理1.ロックを取得できなかったスレッドを指定された秒数だけ待機させる
処理2.synchronizedブロックに入る前に、
他のスレッドがbeanオブジェクトのロックを獲得しているかチェックする。

環境はJDK1.4です。
以上、よろしくお願いいたします。
Emacs信者
常連さん
会議室デビュー日: 2003/08/10
投稿数: 38
投稿日時: 2004-03-24 16:25
Doug Leaのutil.concurrentが、まさにその機能を実現するライブラリです。

とりあえず、EDU.oswego.cs.dl.util.concurrent.Mutexあたりでどうでしょう?
masa
常連さん
会議室デビュー日: 2003/01/14
投稿数: 37
投稿日時: 2004-03-24 19:42
Emacs信者様、ご返答ありがとうございます。

EDU.oswego.cs.dl.util.concurrent.Mutex確認させていただきました。
結構ボリュームありますね。
じっくり見てみます。

ちなみに現状ですが、

private static volatile boolean lock;

というフィールドを、
synchronizedブロックを記述するクラスに追加し、
これをフラグとして使おうかと思っていました。

また、何かありましたらよろしくお願いいたします。

1

スキルアップ/キャリアアップ(JOB@IT)