关于Java中的线程的澄清

时间:2015-01-20 17:42:10

标签: java multithreading

我试图用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的任何线程局部变量,则在第二次迭代中将覆盖它们的值。

这可能听起来很愚蠢,但请帮助我。

1 个答案:

答案 0 :(得分:6)

您将对象引用变量混淆。

  

我假设t2.getId()和t2.getName()将打印相同的值,因为在循环的每次迭代中,新线程被分配给相同的对象线程对象 T2

不,新的主题 对象 正被分配到相同的参考变量,t2。

变量,这里是t2,指的是分配给它的任何对象,变量名在这个上下文中没有意义,而是对象引用是什么 真的 事项。由于您在for循环中更改了引用,因此对象&#34; name&#34; (如果它有一个名称字段)同样会改变。

我觉得完全理解这个关键区别,一个真正涉及Java OOPS编程核心的区别,曾经实现的主要步骤之一将极大地帮助程序员。