0

Java で MULTITHREADING について学んでいますが、次のコードで、子スレッドで run メソッドを呼び出すために start メソッドが実行されたときに、子スレッドがすぐに実行されない理由を知りたいですか?

代わりに、start メソッドを実行した後、メイン スレッドはそのコードを実行し続け、"." の出力を開始します。これは 3 回実行され、制御は子スレッドに引き継がれます。その後、子スレッドはそのコードを 1 回実行し、メイン スレッドに戻ります。その後、メインスレッドが完了し、子スレッドも実行を完了します。

なぜこれが起こるのか理解できませんか?

class MyThread implements Runnable {

    String thrdName;

    MyThread(String name) {
        thrdName = name;
    }

    public void run() {
        System.out.println(thrdName + " starting.");
        for (int count = 0; count < 10; count++) {
            System.out.println("In " + thrdName + ", count is " + count);
        }
    }
}

class UseThreads {

    public static void main(String args[]) {
        System.out.println("Main thread starting.");
        MyThread mt = new MyThread("Child #1");
        Thread newThrd = new Thread(mt);
        newThrd.start();
        for (int i = 0; i < 50; i++) {
            System.out.print(".");
        }
    }
}
4

2 に答える 2

4

スレッドを呼び出すときstart()、スレッドが開始される速度について保証はありません。これは、コンピュータのスレッド スケジューラ次第です。コードを複数回実行すると、スレッドに対していくつかの異なる実行順序が得られる可能性があります。

于 2012-08-08T23:33:52.977 に答える
2

スレッドを開始するための呼び出しは非同期です。スレッドが実行を開始するまで待機せずに戻ります。それは本質的にすぐに戻ります。

少しロックして、その動作を自分で実装できます。これにより、開始したスレッドが何らかのシグナルを発行して実行を開始したことを示すまで、メインスレッドが一時停止します。

于 2012-08-08T23:35:53.113 に答える