[解決済み] 同期化されたメソッドを別の同期化されたメソッドから呼び出しても安全ですか?
2023-05-08 09:57:41
質問
synchronizedメソッドが別のsynchronizedメソッドを呼び出した場合、スレッドセーフになりますか?
void synchronized method1() {
method2()
}
void synchronized method2() {
}
どのように解決するのですか?
はい、メソッドを
synchronized
としてマークした場合、本当にそうしていることになります。
void method1() {
synchronized (this) {
method2()
}
}
void method2() {
synchronized (this) {
}
}
スレッドコールがメソッド1からメソッド2に入ったとき、そのスレッドコールのロックが
this
へのロックを保持していることを確認し、それを通過することができます。
スレッドが直接メソッド1やメソッド2に入ると、ロックを取得できるまでブロックされます (
this
) を取得するまでブロックし、その後、入力します。
コメントでJames Blackが指摘したように、メソッド本体の中で何をするのかに注意する必要があります。
private final List<T> data = new ArrayList<T>();
public synchronized void method1() {
for (T item : data) {
// ..
}
}
public void method3() {
data.clear();
}
突然、スレッドセーフでなくなるのは、あなたが見ているのが
ConcurrentModificationException
を使用しているため、将来的には
method3
は非同期であるため、 スレッド B が
method1
.
関連
-
[解決済み】コレクションが変更され、列挙操作が実行されないことがある。
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで数値を小数点以下n桁に丸める方法
-
[解決済み] Eclipseにプロジェクトをインポートした後に「Must Override a Superclass Method」エラーが発生する。
-
[解決済み] シンクロナイズド」とはどういう意味ですか?
-
[解決済み】atomic / volatile / synchronizedの違いは何ですか?
-
[解決済み] Java synchronized method lock on object, or method?
-
[解決済み】Synchronized Blockの代わりにSynchronized Methodを使用する利点はありますか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
mvn' は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
java.sql.SQLException: executeQuery()でデータ操作文を発行できません。
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
Junitのユニットテストはjava.lang.Testを報告します。
-
ジャバアレイ
-
Javaがテキストファイルを読み込む
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
テストが空であるかどうかを判断するためのオプションの処理