System.out.println および System.err.println を使用したアウトオブオーダー印刷について
System.out.println を使用する場合および System.err.println を使用すると、これら 2 つのメソッドからの出力が順序どおりに表示されないという予期しない動作が発生する可能性があります。 console.
問題:
提供されたコード内:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.err.println("err"); } }
出力:
out out out out out err err err err err
交互の代わりに「out」と「err」の間にある場合、出力にはすべての「out」行とその後にすべての「err」が表示されます。 Lines.
原因:
この動作は、System.out と System.err が異なるストリームであることが原因です。これらのストリームに書き込むと、データは最初にバッファリングされます。バッファされたデータは、次のような特定の時点でのみ実際のコンソール出力に書き込まれます。
デフォルトでは、 System.out と System.err は異なる方法でフラッシュされます。 System.out は System.err よりも頻繁にフラッシュされます。したがって、System.out に書き込まれるデータは、System.err に書き込まれるデータより前に表示される傾向があります。
解決策:
出力が「out」と「out」の間で交互になるようにするには「エラー」の場合は、内部で System.out.flush() と System.err.flush() を呼び出すことができます。ループ:
public static void main(String[] args) { for (int i = 0; i < 5; i++) { System.out.println("out"); System.err.println("err"); System.out.flush(); System.err.flush(); } }
この変更により、出力は期待どおりに交互になります:
out err out err out err out err out err
以上がSystem.out.println および System.err.println の出力が順序どおりに表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。