gpt4 book ai didi

java - Java 线程中的数据成员会发生什么?

转载 作者:行者123 更新时间:2023-12-01 11:21:39 26 4
gpt4 key购买 nike

谁能解释一下线程处理时数据成员会发生什么?我的意思是在下面的代码中,输出是我想要的,即线程名称及其相应的编号。但是,如果我将 1 个线程的引用传递给所有其他线程,则线程名称会有所不同,但所有线程名称都会打印数字 50。为什么会出现这种情况?

class Thread3 implements Runnable
{
int x;

public void run()
{
for(int i=1;i<=5;i++)
{
System.out.println(Thread.currentThread().getName()+" "+ x);

try{
Thread.sleep(1000);
}catch(Exception e){ }
}

}
}
public class RunThread3 {

public static void main(String s[])
{
Thread3 t1=new Thread3();
t1.x=50;
Thread tt1=new Thread(t1,"thread1");
tt1.start();

Thread3 t2=new Thread3();
t2.x=100;
Thread tt2=new Thread(t2,"thread2");
tt2.start();

Thread3 t3=new Thread3();
t3.x=150;
Thread tt3=new Thread(t3,"thread3");
tt3.start();

for(int i=1;i<=5;i++)
{
System.out.println(Thread.currentThread().getName());
try{
Thread.sleep(1000);
}catch(Exception e){ }
}

}
}

此处将 1 个线程的引用传递给所有其他线程

class Thread3 implements Runnable
{
int x;

public void run()
{
for(int i=1;i<=5;i++)
{
System.out.println(Thread.currentThread().getName()+" "+ x);

try{
Thread.sleep(1000);
}catch(Exception e){ }
}

}
}
public class RunThread3 {

public static void main(String s[])
{
Thread3 t1=new Thread3();
t1.x=50;
Thread tt1=new Thread(t1,"thread1");
tt1.start();

Thread3 t2=new Thread3();
t2.x=100;
Thread tt2=new Thread(t1,"thread2");
tt2.start();

Thread3 t3=new Thread3();
t3.x=150;
Thread tt3=new Thread(t1,"thread3");
tt3.start();

for(int i=1;i<=5;i++)
{
System.out.println(Thread.currentThread().getName());
try{
Thread.sleep(1000);
}catch(Exception e){ }
}

}
}

最佳答案

在后面的代码中,您将线程 t1 的引用传递给所有人:

Thread3 t1=new Thread3();
t1.x=50;
Thread tt1=new Thread(t1,"thread1");
tt1.start();
Thread tt2=new Thread(t1,"thread2");
tt2.start();
Thread tt3=new Thread(t1,"thread3");
tt3.start();

这意味着所有线程的 x 值为 50,当您执行代码时,您将获得预期值:
线程1 50
线程2 50
主要的
线程3 50
主要的
线程1 50
线程3 50
线程2 50
线程1 50
主要的
线程3 50
线程2 50
线程3 50
主要的
线程2 50
线程1 50
主要的
线程3 50
线程2 50
线程1 50

在前一种情况下,您有不同的线程,并且它们相应地工作。

关于java - Java 线程中的数据成员会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31157338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com