gpt4 book ai didi

java - 运行线程对象的多个实例

转载 作者:行者123 更新时间:2023-12-01 23:09:55 25 4
gpt4 key购买 nike

我有一个线程对象 - ThreadB,它添加了数字 1 - 100。我创建了它的 2 个实例 - b 和 c。

启动2个线程(不同的实例)并运行它。

结果:

    Waiting for b to complete...
Total is: 4950
Waiting for c to complete...

为什么我的第二个实例没有完成...

Java代码:

public class ThreadA {
public static void main(String[] args){
ThreadB b = new ThreadB();
ThreadB c = new ThreadB();
b.start();
c.start();

synchronized(b){
try{
System.out.println("Waiting for b to complete...");
b.wait();
}catch(InterruptedException e){
e.printStackTrace();
}

System.out.println("Total is: " + b.total);
}

synchronized(c){
try{
System.out.println("Waiting for c to complete...");
c.wait();
}catch(InterruptedException e){
e.printStackTrace();
}

System.out.println("Total is: " + c.total);
}
}
}

class ThreadB extends Thread{
int total;
@Override
public void run(){
synchronized(this){
for(int i=0; i<100 ; i++){
total += i;
}
notify();
}
}
}

最佳答案

因为当您位于第一个 ThreadB 上同步的 block 时,您的第二个 ThreadB 已完成。然后,您等待第二个 ThreadB,但 notification() 已经发生,因此您将永远在那里等待。

请注意,这并不能保证,您的程序有时可能会工作。

在 ThreadB 类中放入一些打印语句来测试这个理论。

关于java - 运行线程对象的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22177774/

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