このマルチスレッド プログラムのコード出力を Java で説明するにはどうすればよいですか?

トラファルガー・ロー

Javaでマルチスレッドを勉強していて、次のコードを書きました。

    public class MulThread extends Thread
{
    public void run()
    {
        for(int i=1; i<5;i++)
        {
            try
            {
                Thread.sleep(500);
            }
            catch(Exception e){ System.out.println(e);}
            System.out.println(i);
        }
    }


public static void main(String [] args)
{
    MulThread t1 = new MulThread();
    MulThread t2 = new MulThread();
    MulThread t3 = new MulThread();

    t1.start();
    t1.run();
    t2.start();
    t2.run();

    t3.start();
    t3.run();

}
}

私はこれについて何人かの友人と議論し、出力は完全に混乱するべきであるという結論に達しました。しかし、何らかの理由で、コンパイラは常に次の出力を生成します。

1
1
2
2
3
3
4
4
1
1
2
2
3
3
4
4
1
1
2
2
3
3
4
4

スレッドがスケジューラに到達したときに、ここで何が起こっているのか正確に説明できますか? ランダムなスープでそれぞれ 6 回繰り返される 1、2、3、および 4 の出力が混乱しないのはなぜですか?

私のメンターの何人かは、これは単なる偶然であり、私の OS か何かに依存すると言っていますが、私はそれについては懐疑的です。コードを 10 回以上実行しましたが、常に同じ結果が生成されます。

彼らはいた

を呼び出すt1.start()と、セカンダリ スレッドが開始され、run()メソッドが実行されます。を呼び出すとt1.run()run()メイン スレッドでメソッドが実行されます。

これは、ループが終了したt2.start();後にのみ実行されること意味しt1.run();、この時点で によって作成されたスレッドt1.start()はすでに終了ています。

run()メソッドのループには大きなスリープ (0.5 秒) が含まれているため、t1.start()(セカンダリ スレッドで実行される) とt1.run()(メイン スレッドで実行される) の出力がインターリーブされる可能性が非常に高くなります (スリープは最初のスレッドがスリープしている間に、2 番目のスレッドが制御を取得して次の出力を出力するのに十分な時間です)。

スリープ期間を短縮すると、おそらく異なる出力が表示されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

EclipseでJavaメソッドの説明を作成するにはどうすればよいですか?

分類Dev

ElasticsearchクエリJavaの完全な説明を取得するにはどうすればよいですか?

分類Dev

ファイルの内容を読み取るJavaスレッドプールプログラムを作成するにはどうすればよいですか?

分類Dev

このマルチスレッドJavaアプリケーションでは、1つのスレッドのみが順次プログラムのように実行されているように見えますか?

分類Dev

Javaプログラム。「isLuckyメソッドを配列にループさせるにはどうすればよいですか?また、結果をmainメソッドに出力するにはどうすればよいですか?

分類Dev

Windows 7のコマンドラインで.jar javaプログラムを実行するにはどうすればよいですか?

分類Dev

WindowsのコマンドラインからJavaプログラムを実行するにはどうすればよいですか?

分類Dev

Javaマルチスレッドプログラムはどのようにして複数のCPUコアを使用できますか?

分類Dev

GKSavedGameの説明を更新するにはどうすればよいですか?

分類Dev

マルチスレッドメカニズムを使用してJavaの実行を確認するにはどうすればよいですか?

分類Dev

Vorpalにコマンドの説明を出力させるにはどうすればよいですか?

分類Dev

ターミナルコマンドを使用して簡単なJavaプログラムを実行するにはどうすればよいですか?

分類Dev

ランチャーで「起動された」Javaプログラムの重複アイコンを削除するにはどうすればよいですか?

分類Dev

このプログラムをJavaでコマンドライン引数として実行するとエラーが発生します。これを修正するにはどうすればよいですか?

分類Dev

Windowsで、特定のJavaプログラムで2つのコマンドウィンドウを開くバッチファイルを作成するにはどうすればよいですか?

分類Dev

このプログラムを修正して、java.lang.NumberFormatExceptionがスローされないようにするにはどうすればよいですか?

分類Dev

Javaでスレッド化されたコンソールプログレスバーを作成するにはどうすればよいですか?

分類Dev

このstateQuiz.javaプログラムを終了するにはどうすればよいですか

分類Dev

JavaプログラムでWebサイトからHTMLコードを取得するにはどうすればよいですか?

分類Dev

ArrayListをスレッドセーフにするにはどうすればよいですか?Javaの問題に対する別のアプローチ?

分類Dev

Java:他のプログラムから値を取得するにはどうすればよいですか?

分類Dev

Java:他のプログラムから値を取得するにはどうすればよいですか?

分類Dev

Javaプログラムをリモートコマンドとして呼び出しながらローカルファイルを提供できるように、Javaプログラムとシェルスクリプトの組み合わせを作成するにはどうすればよいですか?

分類Dev

プログラムに貼り付けられたJavaコードを実行するにはどうすればよいですか

分類Dev

Javaプログラムを別のコンピューターにコピーするにはどうすればよいですか?

分類Dev

Javaでスレッドをプロファイルするにはどうすればよいですか?

分類Dev

Javaマルチスレッド環境でArrayList <T>をコピーするにはどうすればよいですか?

分類Dev

AndroidのJavaでマルチマップを作成するにはどうすればよいですか

分類Dev

このJavaプログラムでロジックを取得して、ループを機能させるにはどうすればよいですか?

Related 関連記事

  1. 1

    EclipseでJavaメソッドの説明を作成するにはどうすればよいですか?

  2. 2

    ElasticsearchクエリJavaの完全な説明を取得するにはどうすればよいですか?

  3. 3

    ファイルの内容を読み取るJavaスレッドプールプログラムを作成するにはどうすればよいですか?

  4. 4

    このマルチスレッドJavaアプリケーションでは、1つのスレッドのみが順次プログラムのように実行されているように見えますか?

  5. 5

    Javaプログラム。「isLuckyメソッドを配列にループさせるにはどうすればよいですか?また、結果をmainメソッドに出力するにはどうすればよいですか?

  6. 6

    Windows 7のコマンドラインで.jar javaプログラムを実行するにはどうすればよいですか?

  7. 7

    WindowsのコマンドラインからJavaプログラムを実行するにはどうすればよいですか?

  8. 8

    Javaマルチスレッドプログラムはどのようにして複数のCPUコアを使用できますか?

  9. 9

    GKSavedGameの説明を更新するにはどうすればよいですか?

  10. 10

    マルチスレッドメカニズムを使用してJavaの実行を確認するにはどうすればよいですか?

  11. 11

    Vorpalにコマンドの説明を出力させるにはどうすればよいですか?

  12. 12

    ターミナルコマンドを使用して簡単なJavaプログラムを実行するにはどうすればよいですか?

  13. 13

    ランチャーで「起動された」Javaプログラムの重複アイコンを削除するにはどうすればよいですか?

  14. 14

    このプログラムをJavaでコマンドライン引数として実行するとエラーが発生します。これを修正するにはどうすればよいですか?

  15. 15

    Windowsで、特定のJavaプログラムで2つのコマンドウィンドウを開くバッチファイルを作成するにはどうすればよいですか?

  16. 16

    このプログラムを修正して、java.lang.NumberFormatExceptionがスローされないようにするにはどうすればよいですか?

  17. 17

    Javaでスレッド化されたコンソールプログレスバーを作成するにはどうすればよいですか?

  18. 18

    このstateQuiz.javaプログラムを終了するにはどうすればよいですか

  19. 19

    JavaプログラムでWebサイトからHTMLコードを取得するにはどうすればよいですか?

  20. 20

    ArrayListをスレッドセーフにするにはどうすればよいですか?Javaの問題に対する別のアプローチ?

  21. 21

    Java:他のプログラムから値を取得するにはどうすればよいですか?

  22. 22

    Java:他のプログラムから値を取得するにはどうすればよいですか?

  23. 23

    Javaプログラムをリモートコマンドとして呼び出しながらローカルファイルを提供できるように、Javaプログラムとシェルスクリプトの組み合わせを作成するにはどうすればよいですか?

  24. 24

    プログラムに貼り付けられたJavaコードを実行するにはどうすればよいですか

  25. 25

    Javaプログラムを別のコンピューターにコピーするにはどうすればよいですか?

  26. 26

    Javaでスレッドをプロファイルするにはどうすればよいですか?

  27. 27

    Javaマルチスレッド環境でArrayList <T>をコピーするにはどうすればよいですか?

  28. 28

    AndroidのJavaでマルチマップを作成するにはどうすればよいですか

  29. 29

    このJavaプログラムでロジックを取得して、ループを機能させるにはどうすればよいですか?

ホットタグ

アーカイブ