0

実行の合間にメソッドを「一時停止」し、外部でトリガーしてこのメ​​ソッドの実行を継続するにはどうすればよいですか?

スレッドはサーブレットであり、executeAndWaitメソッドはボタンをクリックすることで開始されます。SessionScoped次に、変数のポーリングを実行します。この変数の状態が変化した場合(たとえば、trueに)、ポーリング/待機メソッドは続行する必要があります。

私は最初にObserverパターンについてです。しかし、これを使用すると、メソッドの実行をトリガーできます。しかし、私はスリープ/待機してメソッドの続行をトリガーする必要があります。

「グローバル」変数へのポーリングとは別に、これを他にどのように行うことができますか。

class MyThread {

    @Inject
    MyBean bean;

    doExecuteAndWait() {
        //this waits for the var to turn into "true" state
        while(!bean.isVarValid()) {
            Thread.sleep(1000);
        }
        //continue execution if somevar is set to true externally
    }
}


class MySignal {
    @Inject
    MyBean bean;

    //this triggers the continuation of the method from class above
    toggleVar() {
        bean.setVarValid(true);
    }   
}

@SessionScoped
class MyBean() {
    varValid = false;

    isVarValid() {
        return varValid;
    }

    setVarValid(Boolean status) {
        this.varValid = status;
    }
}
4

1 に答える 1

0

CountDownLatchを使用できます。

に初期化し、1を呼び出してから、解放する必要があるとき からメソッドを呼び出します。await()MyThreadcountDown()MySignal

このようにして、変数の値をポーリングし続ける必要はありません。

于 2012-08-22T21:34:34.453 に答える