我正在学习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]
我知道它们是两个具有相同名称的不同线程,所以如何在不更改名称的情况下知道它们是不同的线程?
答案 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