0

私は待機と通知に関連する簡単なコードを開発していました.2つの別々のクラスを作成しました.以下はクラスです.

    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。の型bは onlyThreadでありThreadB、コンパイラがtotals識別子を解決できない理由ではありません

さらに:

  • public フィールドは本当に悪い考えです - 代わりにプロパティを使用してください
  • クラス自体が and を呼び出すため、 aでwaitandを呼び出すことは非常に悪い考えです。notifyThreadThreadwaitnotify
  • 懸念事項をより適切に分離するために、通常Runnableは を拡張する代わりに実装する必要があります。Thread
  • 一般に、一般に公開されているモニターを同期する (そして待機する) よりも、そのコードにのみ表示されるモニターで同期することを知っているクラスで何かを呼び出す方がよいでしょう。スレッドについての推論が容易になります。
于 2012-04-19T17:27:54.707 に答える