-1

2つのメソッドを実行する必要があります

  1. await()
  2. signal()

条件は、メソッドの実行が完了した後、メソッドawait()のみsignal()を呼び出す必要があるということです。

私の場合、アプリケーションは力を近づけています。

ここにサンプル例を書きました:

    private final Object lock = new Object();

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    signal();
    try {
        await();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("Method: after await");
}

public void signal() {
    synchronized (lock) {
        System.out.println("Method before ");
        **lock.notify();**
        System.out.println("Method await after signal ");
    }
}

public void await() throws InterruptedException {
    // synchronized (lock) {


    Thread t = new Thread() {
        public void run() {
            System.out.println("Method await before wait ");
            try {
                **lock.wait();**
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                System.out.println("Method in exception ");
            }
            System.out.println("Method await after wait ");
        }
    };
}
4

1 に答える 1

0

さて、ここにはいくつかの問題があります:

  • を開始することはありませんThread。行を追加

    t.start();  
    

    を作成した後Thread

  • wait()、同期されたコードからは呼び出されません。これはIllegalMonitorStateException、コードを実行しようとするときに私に与えます。

  • おそらくのawait()signal()に を呼び出し、その間に 1 秒程度待機して、await()が最初にロックを取得することを確認します。そうでない場合、プログラムはブロックされます。

于 2012-07-26T07:37:13.020 に答える