这两个Java之间的区别(创建对象)

时间:2014-04-02 21:32:28

标签: java multithreading object

我正在学习Java中的线程,我遇到过这两个:

Class Runner实现runnable并传递给Thread对象

中的构造函数
  1. Runner runner = new Runner();
    Thread thread1 = new Thread(runner);

  2. Thread thread1 = new Thread(new Runner());

  3. 我从未遇到过第二种选择。如果有人可以帮助初学者Java程序员并告诉我第二个变体的用途是什么,以及在构造函数中创建类的实例时实际调用它会是什么呢?

    谢谢。

3 个答案:

答案 0 :(得分:5)

除了第一个之后没有区别,你有一个引用runner的变量Runner,而在第二个之后,你没有。但是它们都创建了一个新的Runner对象,并使用该新对象构造了一个新的Thread

答案 1 :(得分:2)

这只是将任何表达式用作对象的能力,无论是变量还是构造函数。

作为一个类比,第一个就是“种一个苹果然后放在桌子上。然后,从桌子上的那个苹果做一个馅饼”

第二种类似于“种植一个苹果并从中制作馅饼”。它只是避免使用中间变量来保存苹果(在代码中,可运行)

如果你需要对苹果做一些事情而不是传递它,你需要(在大多数情况下)存储到一个中间变量。这里的比喻是“把苹果长出来,把它放在桌子上。剥掉苹果。用苹果做一个新馅饼”

答案 2 :(得分:2)

我先给小费

它们都相同,JIT会将第一个版本优化为第二个

虽然有一个主要区别。如果您想要调用runner的某些功能,您可以在第一个版本中调用,但不能在第二个版本调用。