有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

关于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) 个答案

  1. # 1 楼答案

    你把对象参考变量搞混了

    I was assuming that t2.getId() and t2.getName() will print the same values since in every iteration of the loop,the new thread is being assigned to same object thread object T2.

    否,正在将一个新线程对象分配给同一参考变量,t2

    变量t2指的是分配给它的任何对象,变量名在本文中没有意义,但对象引用才是真正重要的。由于在for循环中更改了引用,因此对象的“名称”(如果它有name字段)也将同样更改

    我觉得,充分理解这一关键区别,真正触及Java OOPS编程的核心,是一旦实现的主要步骤之一,将极大地帮助程序员