2013-02-11 62 views
2

我是java新手。有人可以帮助我为什么它不调用运行方法。 在此先感谢。主题:未调用运行方法

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的问题)

+0

我认为在Java的早期,有一种趋势是通过扩展Thread来提供run方法,而不是传递Runnable。这取决于Thread实现Runnable,因此具有run方法。 – 2013-02-11 09:14:02

+0

@PatriciaShanahan:当然,这也是一个糟糕的主意:)最好的实践已经开始了,这真是太好了......我们永远都会被设计得很糟糕的图书馆所困扰,这真是一种遗憾...... – 2013-02-11 09:15:06

2

当启动Thread时,由JVM调用run方法。默认实现不做任何事情。您的变量T是正常的Thread,没有Runnable'目标',因此其方法永远不会被调用。你既可以提供ThreadExample一个实例线程的构造函数或有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();