我试图用Java来解决一些基本的东西,并且需要有关Threads的帮助。
今天我遇到了一段代码,其中在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()将打印相同的值,因为在循环的每次迭代中,新线程都被分配给同一个对象线程对象T2。
然而,对于每次迭代,都会打印getId和getName的不同值。
有人可以解释这是怎么可能的,我们不是将新线程分配给同一个对象。
在这种情况下,如果在第一次迭代中创建了T2的任何线程局部变量,则在第二次迭代中将覆盖它们的值。
这可能听起来很愚蠢,但请帮助我。
答案 0 :(得分:6)
您将对象与引用变量混淆。
我假设t2.getId()和t2.getName()将打印相同的值,因为在循环的每次迭代中,新线程被分配给相同的对象线程对象 T2
不,新的主题 对象 正被分配到相同的参考变量,t2。
变量,这里是t2,指的是分配给它的任何对象,变量名在这个上下文中没有意义,而是对象引用是什么 真的 事项。由于您在for循环中更改了引用,因此对象&#34; name&#34; (如果它有一个名称字段)同样会改变。
我觉得完全理解这个关键区别,一个真正涉及Java OOPS编程核心的区别,曾经实现的主要步骤之一将极大地帮助程序员。