任何人都可以解释一下线程中数据成员会发生什么吗?我的意思是在下面的代码中输出是我想要的,即线程名称及其对应的数字。但是,如果我将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){ }
}
}
}
答案 0 :(得分:1)
在后面的代码中,您将线程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,当您执行代码时,您将获得预期值:
thread1 50
thread2 50
main
thread3 50
main
thread1 50
thread3 50
thread2 50
thread1 50
main
thread3 50
thread2 50
thread3 50
main
thread2 50
thread1 50
main
thread3 50
thread2 50
thread1 50
在前一种情况下,您拥有不同的线程并且它们相应地工作。
答案 1 :(得分:0)
这是你对java中的线程和类的误解。
在您的代码中,您有两个不同的实体:java Thread和您的自定义Runnable类。
您在示例中获得的线程名称是java Thread对象的名称。您在示例中获得的数字Sub CopyTotalSalesPrice()
For Each Worksheet In ActiveWorkbook.Worksheets
If Worksheet.Name <> "Summary" Then
Worksheet.Cells(Rows.Count, 7).End(xlUp).Select
End If
If Selection.Value > "0" Then
Selection.Copy
Worksheets("Summary").Cells(Rows.Count, 6).End(xlUp).Offset(2, 0).PasteSpecial (xlPasteValues)
Range("D4").Select
Selection.Copy
Worksheets("Summary").Cells(Rows.Count, 4).End(xlUp).Offset(2, 0).PasteSpecial (xlPasteValues)
End If
Next Worksheet
Worksheets("Summary").Select
End Sub
是您的自定义Runnable类的编号。请注意:我跳过你班级的名字 - 这会产生误解。因此,如果您只使用一个自定义Runnable对象 - 您将始终获得单个x
值。