在Java中,如果thread1.getId() == thread2.getId()
,那么thread1.equals(thread2)
?
我正在尝试追踪多线程应用程序中的错误,我注意到它使用Thread.equals()
比较线程而不是比较它们的ID。 Thread
类不会覆盖其equals
方法,因此两个Thread
对象相同的唯一方法是它们具有相同的内存地址。
修改
到目前为止,我看到答案可能为零的两个原因。
thread1
可能已被终止,thread2
可能正在重复使用相同的ID。因此,ID是相等的,但线程不是。thread1
和thread2
是对同一个线程的引用,但它们不是同一个对象。 (不确定这是否可行。)答案 0 :(得分:4)
返回此Thread的标识符。线程ID是肯定的 创建此线程时生成的长数字。线程ID是 独特的,在其生命周期内保持不变。当一个线程是 终止后,可以重用此线程ID。
这是来自Java Thread
文档。所以你的问题的答案是没有,因为只要第一个线程被终止,另一个线程就可以拥有与前一个线程相同的ID
答案 1 :(得分:0)
是。正如Thread的javadoc所说:
/**
* Returns the identifier of this Thread. The thread ID is a positive
* <tt>long</tt> number generated when this thread was created.
* The thread ID is unique and remains unchanged during its lifetime.
* When a thread is terminated, this thread ID may be reused.
*
* @return this thread's ID.
* @since 1.5
*/
public long getId() {
return tid;
}
答案 2 :(得分:0)
创建线程时,它们的标识符会按顺序递增。它们每次从0开始,并为创建它们的每个进程递增1。因此,ID不是全局唯一的。