如果两个线程对象的ID相等,那么线程对象本身是否相等?

时间:2013-08-01 15:37:27

标签: java multithreading api

在Java中,如果thread1.getId() == thread2.getId(),那么thread1.equals(thread2)

总是如此

我正在尝试追踪多线程应用程序中的错误,我注意到它使用Thread.equals()比较线程而不是比较它们的ID。 Thread类不会覆盖其equals方法,因此两个Thread对象相同的唯一方法是它们具有相同的内存地址。

修改

到目前为止,我看到答案可能为零的两个原因。

  1. thread1可能已被终止,thread2可能正在重复使用相同的ID。因此,ID是相等的,但线程不是。
  2. thread1thread2是对同一个线程的引用,但它们不是同一个对象。 (不确定这是否可行。)

3 个答案:

答案 0 :(得分:4)

getID

  

返回此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不是全局唯一的。