System.out.printlnからのマルチスレッド出力はインターリーブされているか
質問
複数のスレッドが同期を取らずに System.out.println(String) を呼び出した場合、出力はインターリーブされるのでしょうか?それとも、各行の書き込みはアトミックなのでしょうか?その場合 API は同期について言及しないので、これは可能なように思われる、またはインターリーブ出力はバッファリングおよび/またはVMメモリモデルなどによって防止されていますか?
EDIT。
例えば、各スレッドに
System.out.println("ABC");
は出力が保証されています。
ABC
ABC
とかありそう。
AABC
BC
どのように解決するのですか?
API ドキュメントでは、スレッドセーフについて言及されていないため
System.out
オブジェクトの
もまた
PrintStream#println(String)
メソッド
スレッドセーフであると仮定することはできません
.
しかしながら、特定のJVMの基礎となる実装が、スレッドセーフな関数を
println
メソッドにスレッドセーフな関数を使用している可能性は十分にあります (例:
printf
glibc上
) で、実際には、最初の例のように出力が保証されます (常に
ABC\n
であれば
ABC\n
となり、2つ目の例のように文字が挟まることはありません)。 しかし、多くのJVM実装があり、それらはJVM仕様に準拠することだけが要求され、その仕様の外側のいかなる規約にも従わないことを心に留めておいてください。
もしあなたが を絶対に保証しなければならない場合 を絶対に保証しなければならない場合、例えば、手動で相互排除を強制する必要があります。
public void safePrintln(String s) {
synchronized (System.out) {
System.out.println(s);
}
}
もちろん、この例はあくまで例示であり、解決策とみなすべきではありません。例えば
safePrintln(...)
メソッドが安全であるのは
すべて
のコードがそのメソッドを使用し、何も
System.out.println(...)
を直接呼び出すことはありません。
関連
-
[解決済み】Android "ビュー階層を作成した元のスレッドだけが、そのビューに触れることができる"
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
Java の switch case 文で必要な定数式の問題の解決法
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaにおける "implements Runnable "と "extends Thread "の違いについて
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] スレッドは何本までならOK?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
Javaでよくある構文エラー
-
SpringBoot 起動エラー java.nio.charset.MalformedInputException: 入力長 = 2 解決
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
JDK8 の Optional.of と Optional.ofNullable メソッドの違いと使い方を説明する。
-
ecplise プロンプトが表示されます。"選択したものは起動できません。" "最近の起動はありません。"
-
Web Project JavaでPropertiesファイルを読み込むと、「指定されたファイルがシステムで見つかりません」というソリューションが表示されます。
-
git pull appears現在のブランチに対するトラッキング情報がありません。
-
春ブート複数のデータソースの管理(atomikos)同じサーバーホスト上の複数のプロジェクトを開始する複数のJava - jarのエラーソリューション
-
Zipファイルの圧縮・解凍にantを使用する