java中的新运算符

时间:2014-03-16 08:02:12

标签: java multithreading oop object

当实例化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类的对象。

提前谢谢。

2 个答案:

答案 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方法(更不用说如何初始化该对象了)。