当实例化Thread以通过实现Runnable接口创建线程对象时,我们执行类似
的操作public class HelloRunnable implements Runnable {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new Thread(new HelloRunnable())).start();
}
}
参考:Tutorial
问题来自main()
方法中的一行。我知道start()是Thread类的实例方法,这就是为什么我们使用(带有Thread类的新对象)点符号。
现在我的问题是关于这个Thread对象的创建(由new Thread(new HelloRunnable())
创建)。为什么我们将HelloRunnable的对象(即实现Runnable接口的run()的类)传递给构造函数(如果是Thread)。 Thread()构造函数需要HelloRunnable的对象是什么? Thread()构造函数对HelloRunnable对象有什么用处?
通常,Thread()构造函数的工作是创建一个Thread对象。那么Thread()构造函数在哪里使用实现run()'的类的'对象。同时创建Thread类的对象。
提前谢谢。
答案 0 :(得分:2)
“实现运行的类的对象”是必要的,这样才能运行。
否则,线程中会运行什么代码?
你并不需要一个Runnable对象 - 另一种方法是改为扩展Thread并覆盖Thread的run方法。
答案 1 :(得分:0)
要了解Java API中的构造函数,请阅读javadoc(在任何好的IDE中,您可以将鼠标悬停在新的类实例创建表达式上以查看带有javadoc的工具提示)。对于采用Runnable的Thread构造函数,它为says:
分配一个新的Thread对象。此构造函数与Thread(null,target,gname)具有相同的效果,其中gname是新生成的名称。自动生成的名称的格式为" Thread - " + n,其中n是整数。
<强>参数强>:
- target - 启动此线程时调用其run方法的对象。如果为null,则此类run方法不执行任何操作。
因此,Runnable对象提供了要调用的run方法。如果你没有传递这样的对象,那么线程就不会知道哪个类包含run方法(更不用说如何初始化该对象了)。