検索

ホームページ  >  に質問  >  本文

java - new了2个Thread,为什么不是交叉打印?

public static void main(String[] args){

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i=0; i<10; i++){
                    System.out.print(i+" ");
                }
            }
        }).start();

        new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i=0; i<10; i++){
                    System.out.print(i+" ");
                }
            }
        }).start();
    }

输出结果如下:

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 
PHPzPHPz2882日前1576

全員に返信(13)返信します

  • 阿神

    阿神2017-04-18 10:29:18

    CPUの実行速度が速すぎて、数値が小さすぎて違いがわかりません。私だったら、少なくともInteger.MaxValue.

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:29:18

    同期ロックがない場合、2 つのスレッドは前述のクロスプリントを実行しません。スレッドの実行の優先順位は、どちらが最初に CPU リソースを取得するかによって決まります。プログラムはどちらのスレッドが最初に実行されるかを保証できません。 Java マルチスレッドの知識を詳しく見てみましょう。

    返事
    0
  • 迷茫

    迷茫2017-04-18 10:29:18

    設定数が少なすぎると、2 つのスレッドが交差する印刷効果がわかります (ここでの交差とは、スレッド 1 が数値を出力し、スレッド 2 がすぐに数値を出力するということではなく、セグメントごとに行われます)。 ; cpu リソースを取得したらすぐに実行します。クロスプリントを実装する場合、これはプロダクションとコンシューマーの例です。

    返事
    0
  • 高洛峰

    高洛峰2017-04-18 10:29:18

    10 個の数値を出力するには速すぎます。10 を 100 に変更してみてください。

    返事
    0
  • 黄舟

    黄舟2017-04-18 10:29:18

    スレッドのスリープ時間を追加します

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:29:18

    0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 私の場合はこんな感じです

    返事
    0
  • PHP中文网

    PHP中文网2017-04-18 10:29:18

    2 つの for ループの出力ステートメントの前に Thread.sleep(1000) を追加します。
    再試行してください

    返事
    0
  • 阿神

    阿神2017-04-18 10:29:18

    スレッドは実行順序を保証しません。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-18 10:29:18

    スレッドの実行順序は不確実であり、10 個の数字の順序は、何度か実行すると異なる結果が表示されます。また、スレッドの優先順位はスレッドの実行順序を保証するものではありません。優先順位の高いスレッドの方が CPU リソースを獲得できる可能性が高いというだけです。

    返事
    0
  • 迷茫

    迷茫2017-04-18 10:29:18

    リーリー

    このように、比較的明らかなクロスプリント現象が見られますが、実際には、同時実行性とは、どのスレッドが最初に実行され、どのスレッドが後で実行されるかがわからないことを意味し、必ずしもクロスオーバーが発生することを意味するわけではありません。大げさに言えば、2 スレッドのアセンブリ命令を m, n 個挿入することで、複数の階乗レベルの実行シーケンスが可能になります。

    返事
    0
  • キャンセル返事