Thread.currentThread().getName()和getName()有什么区别?

4

静态方法Thread.currentThread().getName()和特定线程实例的getName()有何区别?

其区别在于前者返回当前正在执行的线程的名称,而后者返回指定线程实例的名称。

1
new Thread(new Thread() { @Override public void run() { System.err.println(/***/Thread.currentThread()./***/getName()); }}).start();将显示两者之间的差异。(提示:不要不必要地子类化(例如ThreadJFrameJPanel)。不要为了它而不必要地实现接口。) - Tom Hawtin - tackline
2
它们要么来自不同的类,要么是相同的方法,没有区别。你的问题实际上没有任何意义。 - user207421
3个回答

7
区别在于getName()是一个实例方法,意味着它作用于Thread类的一个实例。 Thread.getCurrentThread()是一个类或静态方法,意味着它不作用于Thread的实例,而是作用于它的类。
最终的区别在于:如果你调用Thread.currentThread().getName()currentThread()将返回一个Thread的实例,你可以在这个实例上调用getName()。你不能调用Thread.getName(),因为getName()必须调用Thread的实例。

1

Thread.currentThread().getName(...) 方法指的是当前线程的名称,而 getName(...) 指的是 Thread 类的任何实例的名称。


0

然而,与此相反的是,Thread.currentThread()返回当前线程实例。因此答案是:两个函数在同一线程中是相同的。试试这个:

Thread nuThread = new Thread("Proba"){
  @Override
  public void run() {
    System.out.println(this.getName());
    Thread other = Thread.currentThread();
    System.out.println(other.getName());
    System.out.println(this==other ? "Same object":"Different object");
  }
};
nuThread.start();
try {
  nuThread.join();
} catch (InterruptedException e) {
  e.printStackTrace();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接