[解決済み] Java synchronized method lock on object, or method?
2022-04-10 14:58:16
質問
同じクラスに2つのsynchronizedメソッドがあり、それぞれが異なる変数にアクセスしている場合、2つのスレッドが同時にその2つのメソッドにアクセスすることは可能ですか?ロックはオブジェクトに対して行われるのでしょうか、それとも同期メソッド内の変数と同じように特定されるのでしょうか?
例
class X {
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
}
2つのスレッドがクラスXの同じインスタンスにアクセスすることは可能か?
x.addA(
) と
x.addB()
を同時に使用するのですか?
どのように解決するのですか?
として宣言した場合、そのメソッドは
同期
(と入力することで行っています)。
public synchronized void addA()
で同期させます。
全体
オブジェクトから別の変数にアクセスする2つのスレッドは、いずれにせよ互いにブロックされます。
もし、一度にひとつの変数だけを同期させ、ふたつのスレッドが異なる変数にアクセスする際に互いにブロックしないようにしたい場合は、それぞれを
synchronized ()
ブロックになります。もし
a
と
b
は、オブジェクトの参照を使用するものでした。
public void addA() {
synchronized( a ) {
a++;
}
}
public void addB() {
synchronized( b ) {
b++;
}
}
しかし、これらはプリミティブであるため、これを行うことはできません。
を使用することをお勧めします。 AtomicInteger の代わりに
import java.util.concurrent.atomic.AtomicInteger;
class X {
AtomicInteger a;
AtomicInteger b;
public void addA(){
a.incrementAndGet();
}
public void addB(){
b.incrementAndGet();
}
}
関連
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] Java の文字列インデックスが範囲外です。0 [閉店]
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] シンクロナイズド」とはどういう意味ですか?
-
[解決済み] 静的メソッドを使用する場合
-
[解決済み] Javaでsynchronized(this)を避けるには?
-
[解決済み】サーブレットはどのように動作するのですか?インスタンス化、セッション、共有変数とマルチスレッド
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Javaで拡張子なしのファイル名を取得する方法は?
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] JAVA_OPTIONS、JAVA_TOOL_OPTIONS、JAVA_OPTSの違いについて
-
[解決済み] Javaにおけるシンボリック参照
-
[解決済み] JavaFX 同じパッケージ内なのに「場所が必要です。
-
[解決済み] Java: getInstanceとStaticの比較