【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

javaについて質問があります。
private Object lock = new Object();という構文のオブジェクト型のインスタンスを作成するというのはどういうことなんでしょうか?なんでインスタンスが作成できるのかも分かりません。また、synchronizedと組み合わせるとthisなどを使った排他制御とどう変わるのでしょうか?

A 回答 (1件)

Java における排他制御について



なんらかのオブジェクトを synchronized 構文で「ロック」することで排他制御を実現しますが、
オブジェクトによって排他制御する範囲が決まるため、
要件にあわせて選ばなければいけません。

new Object() 等で作成した個別インスタンスをロックすると、
その個別インスタンスを使うスレッドのみが範囲なので、
細かく制御を分ける場合に使います。

this をロックすると、
現インスタンスを使うスレッドだけが範囲となり、
一般的な用途ではこれで十分なはずです。

synchronize 修飾したメソッドは、
this とほぼ同じです。

synchronize static 修飾したメソッドは、
this ではなく クラスオブジェクト をロックすることになり、
インスタンス毎ではなくクラスを使う全てのスレッドが範囲なので、
アプリケーション全体を対象として排他するような場合に使います。

参考
https://docs.oracle.com/javase/specs/jls/se13/ht …
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報