0

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

    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

4

1 回答 1

6

这是直接的问题:

Thread b = new Thread();

您永远不会真正创建ThreadB. bis only的类型ThreadThreadB这不是编译器无法解析totals标识符的原因

此外:

  • 公共领域是一个非常糟糕的主意 - 改用属性
  • 调用waitandnotifyThread一个非常糟糕的主意,因为Thread类本身调用waitand notify
  • 您通常应该实现Runnable而不是扩展Thread,以便更好地分离关注点。
  • 通常最好在你的类上调用一些知道在对该代码可见的监视器上同步的东西,而不是同步(并等待)一个公开可见的监视器。它使推理线程变得更容易。
于 2012-04-19T17:27:54.707 回答