3

以下のコードは正常に実行されますが、スレッドを 2 回開始できるということですか?

public class enu extends Thread {
    static int count = 0;

    public void run(){
        System.out.println("running count "+count++);
    }

    public static void main(String[] args) {
        enu obj = new enu();
        obj.run();
        obj.start();
    }
}

出力 - ランニング カウント 0 ランニング カウント 1

4

2 に答える 2

7

いいえ、 を呼び出したときに、新しいスレッドを 1 回だけ開始しましたobj.start()。現在のスレッドでメソッドをobj.run()実行します。run新しいスレッドは作成されず、何度でも呼び出すことができます。

一方、obj.start()複数回の呼び出しはできません。

于 2015-04-26T07:43:03.607 に答える
0

スレッドのライフサイクルは、Thread.State.TERMINATED で終了します。

あなたがしたことはrun()、同じスレッド ( main-Thread) からメソッドを実行することだけでした。

コード部分でスレッドのアクセスを確認したい場合は、非常に簡単なテストがあります。

public class randtom extends Thread {
static int count = 0;

public void run(){
    System.out.println(Thread.currentThread().toString());      
    System.out.println("running count "+count++);
}

public static void main(String[] args) {
    randtom obj = new randtom();
    obj.run();
    obj.start();
}}

これを実行すると、次のようになります。

Thread[main,5,main]
running count 0
Thread[Thread-0,5,main]
running count 1

これが明確になることを願っています!

于 2015-04-27T13:23:06.837 に答える