2013-02-11 2 views
2

Я новичок в java. Может кто-то помочь мне, почему он не вызывает метод Run. Спасибо заранее.Тема: Не вызывающий метод прогона

package com.blt; 

public class ThreadExample implements Runnable { 
    public static void main(String args[]) 
    {  

     System.out.println("A"); 
     Thread T=new Thread(); 
     System.out.println("B"); 
     T.setName("Hello"); 
     System.out.println("C"); 
     T.start(); 
     System.out.println("D"); 
    } 

public void run() 
{ 
    System.out.println("Inside run"); 

} 
} 

ответ

4

Вам необходимо пройти экземпляр ThreadExample к Thread конструктора, чтобы сообщить новую нить, что для запуска:

Thread t = new Thread(new ThreadExample()); 
t.start(); 

(Очень жаль, что Thread класс был плохо разработан различными способами Было бы полезно, если бы у не было есть метод run(), но сделал, чтобы вы передали Runnable в конструктор. Тогда вы бы нашли проблему на com pile-time.)

+0

Я думаю, что в самые ранние дни Java существовала тенденция поставлять метод run, расширяя Thread, а не передавая Runnable. Это зависело от Thread, реализующего Runnable и, следовательно, имеющего метод run. –

+0

@PatriciaShanahan: Абсолютно - тогда это была плохая идея :) Приятно, что лучшая практика продвинулась ... Стыдно, что мы застряли с плохо разработанными библиотеками навсегда ... –

2

Метод run вызывается JVM для вас при запуске Thread. Реализация по умолчанию просто ничего не делает. Ваша переменная T является нормальным Thread, без Runnable 'target', поэтому его метод run никогда не вызывается. Вы можете либо предоставить экземпляр ThreadExample конструктору Thread или имеют ThreadExampleпродлитьThread:

new ThreadExample().start(); 
// or 
new Thread(new ThreadExample()).start(); 
0

Вы также можете сделать это таким way.Do не реализовать Runnable в главном классе, но создать внутренний класс в пределах вашего main класса сделать так:

class TestRunnable implements Runnable{ 
    public void run(){ 
     System.out.println("Thread started"); 
    } 
} 

инстанцируйте его из своего главного класса внутри метода main:

TestRunnable test = new TestRunnable(); 
Thread thread = new Thread(test); 
thread.start(); 
Смежные вопросы