作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试了解 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 的任何线程局部变量,则在第二次迭代中将覆盖它们的值。
这听起来可能是个愚蠢的问题,但请帮帮我。
最佳答案
您将对象 与引用变量 混淆了。
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 编程的核心,是那些一旦实现将对程序员有很大帮助的主要步骤之一。
关于java - 关于 Java 中线程的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28051804/
我是一名优秀的程序员,十分优秀!