静态方法Thread.currentThread().getName()
和特定线程实例的getName()
有何区别?
静态方法Thread.currentThread().getName()
和特定线程实例的getName()
有何区别?
getName()
是一个实例方法,意味着它作用于Thread
类的一个实例。
Thread.getCurrentThread()
是一个类或静态方法,意味着它不作用于Thread
的实例,而是作用于它的类。Thread.currentThread().getName()
,currentThread()
将返回一个Thread
的实例,你可以在这个实例上调用getName()
。你不能调用Thread.getName()
,因为getName()
必须调用Thread
的实例。Thread.currentThread().getName(...)
方法指的是当前线程的名称,而 getName(...)
指的是 Thread 类的任何实例的名称。
然而,与此相反的是,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();
}
new Thread(new Thread() { @Override public void run() { System.err.println(/***/Thread.currentThread()./***/getName()); }}).start();
将显示两者之间的差异。(提示:不要不必要地子类化(例如Thread
,JFrame
,JPanel
)。不要为了它而不必要地实现接口。) - Tom Hawtin - tackline