识别两个不同的线程

时间:2014-08-08 06:59:19

标签: java multithreading

我正在学习java中的多线程。我怀疑是,如果下面有两个不同的线程有两个不同的线程是我的代码

package com.rajeev.test2;

    public class Test11 extends Thread {
        public static void main(String[] args) {
            System.out.println(Thread.currentThread());
            new Test11().start();
            new Test12();
        }
        @Override
        public void run() {
            Thread.currentThread().setName("ram");
            System.out.println(Thread.currentThread());
        }
    }
    class Test12 extends Thread{

        static{
            new Test12().start();
        }
        @Override
        public void run() {
            Thread.currentThread().setName("ram");
            System.out.println(Thread.currentThread());
        }
    }

输出

Thread[main,5,main]
Thread[ram,5,main]
Thread[ram,5,main]

我知道它们是两个具有相同名称的不同线程,所以如何在不更改名称的情况下知道它们是不同的线程?

5 个答案:

答案 0 :(得分:5)

您可以跟踪Threads具有相同名称的ID,这将是唯一的。

每个帖子都有一个名称用于识别目的。多个线程可能具有相同的名称。如果在创建线程时未指定名称,则会为其生成新名称。

JVM按其ID跟踪线索,而不是按名称跟踪。

long threadId = Thread.currentThread().getId();

答案 1 :(得分:2)

您不应使用线程的名称来标识唯一的线程。 Thread类有一个getId()方法,它返回创建线程时生成的long个数,并且对于该线程是唯一的。使用它以了解它们是否不同。

答案 2 :(得分:0)

使用getId方法

使用getId标识线程的唯一性。

创建新线程时要设置线程ID。不论将使用的构造函数。

Thread() Thread(Runnable, String) Thread(Runnable) Thread(String) Thread(ThreadGroup, Runnable, String, long) Thread(ThreadGroup, Runnable, String) Thread(ThreadGroup, Runnable) Thread(ThreadGroup, String)

所有构造函数都使用init方法。在这个方法中有线程id生成。

此外,在clone方法中也有生成线程ID。

如果线程被克隆,则为新线程引用设置新线程id。

使用equals&哈希码方法

识别线程唯一性的另一种方法是使用equals和hashcode。

线程没有相同的equals和hascode方法。

因此使用哈希码来区分线程唯一性。

答案 3 :(得分:0)

您可以使用equals运算符简单地比较Test11和Test12的两个对象(即线程)。

答案 4 :(得分:0)

您的示例代码非常奇怪。

  • 从不继承Thread - 在极少数情况下这是必要的。
  • 通常Thread从创建它的代码中获取其名称。这使得为​​每个新线程提供另一个不同的名称变得容易。请勿在{{1​​}}方法中设置名称。
  • 请不要在类的run构造函数中启动线程。

可能你的例子应该看起来很简单:

static