【问题标题】:Clarification regarding threads in Java关于 Java 中的线程的说明
【发布时间】:2015-01-20 17:42:09
【问题描述】:

我正在尝试了解 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 的任何线程局部变量,那么在第二次迭代中它们的值将被覆盖。

这听起来可能是个愚蠢的问题,但请帮帮我。

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    您将 objectreference variable 混淆了。

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

    不,一个新的线程对象正在分配给相同的引用变量,t2。

    变量,这里的 t2,指代分配给它的任何对象,变量名在这种情况下没有意义,而是对象引用是 真正很重要。由于您在 for 循环中更改了引用,因此对象的“名称”(如果它具有 name 字段)同样会发生变化。

    我觉得完全理解这一关键区别,真正触及 Java OOPS 编程的核心,是那些一旦实现将对程序员有很大帮助的主要步骤之一。

    【讨论】:

    • 非常感谢您的澄清。这回答了我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 2013-09-14
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多