Javaの質問です。マルチスレッド系は最近始めたばかりなのですが、2つのオブジェクトの両方が利用可能になるまで待たせるつもりでsynchronizedブロックを2重に使ったところ、ソースコードを見た人に笑われました。何がいけないのでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2006/09/24 01:56:21
  • 終了:2006/09/29 00:38:34

回答(3件)

id:kurukuru-neko No.1

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/09/24 02:36:31

ポイント15pt

普通しないですね。

ブロックを2重にしている事は最初で排他されている

状態を保持したままなので、2つ目は既に排他

された状態ですから、同時実行されませんから。

最悪デッドロックですね。

http://www.ipa.go.jp/security/awareness/vendor/programming/a03_0...

id:westfish

おっしゃっていることがよくわかりませんが、質問文がわかりにくかったでしょうか?例えばVector a;とVector b;があった場合に、その両方に対して操作を行うコードをsynchronized(a)とsynchronized(b)の両方で囲むと言いたかったのですが…。aとbに対するロックの順番が常に同じであればデッドロックにはならないのではないかと思います。

2006/09/24 03:12:25
id:kurukuru-neko No.2

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/09/24 04:31:42

ポイント30pt

>aとbに対するロックの順番が常に同じであれば

>デッドロックにはならないのではないかと思います。

普通そのようなことをデッドロックする可能性が

あるといいます。

約束を守っていれば大丈夫はよくあるデッドロック

の原因です。(複数ロックの問題もある)

14.17 synchronized 文   

 http://www.y-adagio.com/public/standards/tr_javalang/14.doc.htm

14.18 synchronized

 http://java.sun.com/docs/books/jls/second_edition/html/statement...

想像ですが笑った理由は、排他対象が1つ2つならまだしも

多数に増えたや、後の保守等を考えた場合、無理があると

思ったように思ったと思います。

間違った使い方というわけではありません。

http://www.netgene.co.jp/java/concurrentTips.html

17.13 ロック及び同期 

http://www.y-adagio.com/public/standards/tr_javalang2/memory.doc...

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

http://www-06.ibm.com/jp/developerworks/java/041203/j_j-jtp11234...

http://www-06.ibm.com/jp/developerworks/java/library.html

http://www-06.ibm.com/jp/developerworks/java/020726/j_j-dcl.html

http://www.javaroad.jp/index_basic.htm#thread

id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402006/09/24 08:53:58

ポイント35pt

2重のブロックだけだと特に変なことでもないので(デッドロックにならないよう注意は必要ですが)、そのほかの部分で何かあるのではないかと思います。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません