关于等待和通知

时间:2012-04-19 17:25:49

标签: java

我正在开发与wait& amp相关的简单代码。 notify我创建了两个seprate类,下面是类

    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线程对象访问总计时,我得到了complie time错误..

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

请告诉我如何更正它以便我可以执行我的代码.. !!在此先感谢..!1

1 个答案:

答案 0 :(得分:6)

这是当前的问题:

Thread b = new Thread();

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

此外:

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