关于Java中线程的澄清

关于Java中线程的澄清,java,multithreading,Java,Multithreading,我正在尝试用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++) {

我正在尝试用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());
    }
}

}
公共类测试线程{
公共静态void main(字符串参数[])
{
线程t1=新线程();
System.out.println(“**************”+t1.getId());
对于(inti=0;i您将对象与引用变量混淆

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

否,正在将新线程对象分配给同一引用变量,t2

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

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

您将对象与引用变量混淆了

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

否,正在将新线程对象分配给同一引用变量,t2

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


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

非常感谢澄清。这回答了我的问题。非常感谢澄清。这回答了我的问题