ホームページ > Java > &#&チュートリアル > System.out.println および System.err.println の出力が時々順序どおりにならないのはなぜですか?

System.out.println および System.err.println の出力が時々順序どおりにならないのはなぜですか?

Susan Sarandon
リリース: 2024-12-15 05:16:18
オリジナル
218 人が閲覧しました

Why Are System.out.println and System.err.println Outputs Sometimes Out of Order?

System.out.println および System.err.println の印刷順序の不規則性

System.out.println を使用してコンソールにメッセージを出力する場合() と System.err.println() をループ内で実行すると、出力されるメッセージが予想外に表示されるという問題が発生する可能性があります。 注文。印刷メソッドを交互に呼び出しているにもかかわらず、出力には、あるメッセージ タイプの後に他のメッセージ タイプが続くというグループ化された順序が表示されるため、混乱が生じます。

この現象は、System.out と System.err が別個の出力ストリームを表すために発生します。各ストリームは、特定のしきい値に達するかフラッシュ操作が実行されるまで、印刷された文字をキャッシュするために独自のバッファーを維持します。フラッシュ操作では、バッファリングされたテキストが実際のコンソール ウィンドウに送信されます。

提供されたコード スニペットでは:

public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        System.out.println("out");
        System.err.println("err");
    }
}
ログイン後にコピー

ループは繰り返し "out" を System.out に書き込み、"err" を System.out に書き込みます。システムエラー。ただし、これらのストリームはバッファを個別にフラッシュします。デフォルトでは、フラッシュ操作は一定時間後、またはバッファーがしきい値に達したときにトリガーされます。

各ストリームには独自のバッファーがあるため、文字は個別に蓄積されます。ループが完了すると、System.out バッファがフラッシュされて、蓄積されたすべての「out」メッセージが出力され、続いて System.err バッファがフラッシュされてすべての「err」メッセージが出力されます。これにより、不均一な出力パターンが発生します。

この問題を修正し、メッセージが呼び出された順序で印刷されるようにするには、以下を使用して各バッファを明示的にフラッシュできます。

System.out.flush();
System.err.flush();
ログイン後にコピー

Byバッファをフラッシュすると、バッファされた文字がコンソールに即座に表示され、一貫性のある論理的な印刷順序が確保されます。

以上がSystem.out.println および System.err.println の出力が時々順序どおりにならないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート