@Tunaki 很到位。我只是补充他所说的话。
一共有三个 Thread 对象。
- 主线程对象,它是一个 java.lang.Thread
- T1 线程对象,它是一个 java.lang.Thread
- Bang 线程对象是一个 Bang
请注意,主线程和 T1 线程作为单独的线程生成,而 Bang 线程未生成。
您在 run 方法中打印的内容正在线程 T1 上运行。
Thread.currentThread().getId() 将返回正在运行的线程 T1 的 id,即 9。
this.getId() 将返回 Bang 对象的 id,即 8。还记得,您在 T1 对象之前创建了 Bang 对象吗?这就是为什么 Bang 具有较小的 id 8,而 T1 具有较高的 threadId 9。
希望这会有所帮助。我已更新您的代码以打印有关哈希码和类详细信息的更多信息。输出应该给出清晰的图片。
代码:
class Bang extends Thread {
static Thread t1;
public static void main(String[] args) throws Exception {
System.out.println("main thread ID = " + Thread.currentThread().getId());
Bang bang = new Bang(); //Creating a local variable so we can print the object details.
t1 = new Thread(bang);
t1.setPriority(7);
t1.setName("T1");
threadInfo(bang);
threadInfo(t1);
t1.start();
}
public void run() {
threadInfo(this);
}
public static void threadInfo(Thread argThreadObject) {
System.out.println("===================================");
Thread currentThreadObject = Thread.currentThread();
printThreadInfo("currentThreadObject", currentThreadObject);
printThreadInfo("argThreadObject", argThreadObject);
System.out.println("===================================");
}
public static void printThreadInfo(String threadObjId, Thread threadObject) {
System.out.println(
threadObjId + ": "
+ threadObject.getId() + ":"
+ threadObject.getName() + ":"
+ threadObject.getPriority() + ":"
+ threadObject.toString() + " instanceId: "
+ threadObject.hashCode() + "@"
+ threadObject.getClass().getName());
}
}
输出
main thread ID = 1
===================================
currentThreadObject: 1:main:5:Thread[main,5,main] instanceId: 1113847530@java.lang.Thread
argThreadObject: 9:T1:7:Thread[T1,7,main] instanceId: 820485811@java.lang.Thread
===================================
===================================
currentThreadObject: 1:main:5:Thread[main,5,main] instanceId: 1113847530@java.lang.Thread
argThreadObject: 8:Thread-0:5:Thread[Thread-0,5,main] instanceId: 912528090@Bang
===================================
===================================
currentThreadObject: 9:T1:7:Thread[T1,7,main] instanceId: 820485811@java.lang.Thread
argThreadObject: 8:Thread-0:5:Thread[Thread-0,5,main] instanceId: 912528090@Bang
===================================