关于Java中线程的多线程澄清
我正在尝试用Java来理解一些基本的东西,需要关于线程的帮助
今天我遇到了一段代码,其中在for循环中创建了新线程,如下所示:
public class TestThreads {
public static void main(String args[])
{
Thread t1=new Thread();
System.out.println("***************"+t1.getId());
for(int i=0;i<5;i++)
{
Thread t2= new Thread();
System.out.println("++++++++++++++++"+t2.getId());
System.out.println("++++++++++++++++"+t2.getName());
}
}
}
我以为是t2。getId()和t2。getName()将打印相同的值,因为在循环的每次迭代中,新线程都被分配给同一个对象thread object T2
然而,对于每一次迭代,getId和getName的值都不同
有人能解释一下这是怎么可能的吗?我们不是把新线程分配给同一个对象了吗
在这种情况下,如果在第一次迭代中创建了T2的任何线程局部变量,那么在第二次迭代中,它们的值将被覆盖
这听起来可能是个愚蠢的问题,但请帮帮我
# 1 楼答案
你把对象和参考变量搞混了
否,正在将一个新线程对象分配给同一参考变量,t2
变量t2指的是分配给它的任何对象,变量名在本文中没有意义,但对象引用才是真正重要的。由于在for循环中更改了引用,因此对象的“名称”(如果它有name字段)也将同样更改
我觉得,充分理解这一关键区别,真正触及Java OOPS编程的核心,是一旦实现的主要步骤之一,将极大地帮助程序员