[英]Clarification regarding threads in 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()将打印相同的值,因为在循环的每次迭代中,新线程都被分配给同一对象线程对象T2。
但是,对于每次迭代,都会打印不同的getId和getName值。
有人可以解释一下这是怎么可能的,不是我们将新线程分配给同一对象。
在这种情况下,如果在第一次迭代中为T2创建了线程局部变量,则在第二次迭代中将覆盖它们的值。
这听起来可能是个愚蠢的问题,但请帮帮我。
您正在将对象与参考变量混淆。
我假设t2.getId()和t2.getName()将打印相同的值,因为在循环的每次迭代中,新线程都被分配给同一对象线程对象 T2。
不,将新的Thread 对象分配给同一参考变量 t2。
变量,这里是t2,是指分配给它的任何对象,在这种情况下,变量名称是没有意义的,但是对象引用才是真正重要的。 由于您在for循环中更改了引用,因此对象的“名称”(如果它具有名称字段)将同样发生变化。
我觉得完全理解这一关键区别是真正实现Java OOPS编程的核心,这是一旦实现的主要步骤之一,将极大地帮助程序员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.