3

下面的代码运行成功,是否意味着我们可以启动两次线程?

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

不,您只在调用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 回答