2015-04-26 1 views
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

ответ

6

Нет, вы только начали новую нить один раз, когда вы назвали obj.start(). obj.run() выполняет метод run в текущем потоке. Он не создает новый поток, и вы можете называть его столько раз, сколько хотите.

С другой стороны, вызов obj.start() не один раз невозможен.

+0

Значит, вы говорите, что obj.run() не запускает нить? –

+1

@SumitGanjave Да. – Eran

+0

[Эта статья] (http://stackoverflow.com/questions/8579657/java-whats-the-difference-between-thread-start-and-runnable-run) содержит более подробную информацию о различиях. –

0

Жизненный цикл нити заканчивается на Thread.State.TERMINATED.

Все, что вы сделали, было run() из той же темы - main -Thread.

Theres очень простой тест, если вы хотите, чтобы проверить доступ Threads в кодовых частях:

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 

Надеется, что это проясняет!

 Смежные вопросы

  • Нет связанных вопросов^_^