gpt4 book ai didi

java - 关于等待和通知

转载 作者:行者123 更新时间:2023-12-01 16:34:54 24 4
gpt4 key购买 nike

我正在开发与等待和通知相关的简单代码我创建了两个单独的类,下面是这些类

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

synchronized(b) {
try {
System.out.println("Waiting for b to complete...");
b.wait();
} catch (InterruptedException e) {}
//System.out.println("Total is: " + b.totals);
}
}
}

and the other one is ...





class ThreadB extends Thread {
public int totals;

public void run() {
synchronized(this) {
for(int i=0;i<100;i++) {
totals += i;
}
notify();
}
}
}

但是在 ThreadA 类中,当我访问 b 线程对象的总计时,出现编译时间错误,即 ..

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

请告诉我如何纠正它,以便我可以执行我的代码..!!提前致谢..!1

最佳答案

这是当前的问题:

Thread b = new Thread();

您实际上从未创建ThreadB 的实例。 b 的类型只是 Thread,而不是 ThreadB,这就是编译器无法解析 totals 标识符的原因

另外:

  • 公共(public)字段是一个非常糟糕的主意 - 请改用属性
  • Thread 上调用 waitnotify 是一个非常糟糕的主意,因为 Thread 类本身调用等待通知
  • 您通常应该实现 Runnable 而不是扩展 Thread,以便更好地分离关注点。
  • 通常最好在您的类上调用一些知道在仅对该代码可见的监视器上同步的内容,而不是同步(并等待)公共(public)可见的监视器。它使您更容易推理线程。

关于java - 关于等待和通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10233431/

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