1

runnable実装とオーバーライドによってマルチスレッドを実装しましrun()た。スレッドを内部で中断したいrun()

私を助けてください

で何をすればいいvoid run(){ }ですか?

4

3 に答える 3

3

詳細が分からないとなんとも言えません。ただし、選択肢は次のとおりです。

  • Thread.sleep()-そして無条件にしばらく眠る

  • wait/notifyいくつかのオブジェクトを待つためのペア

  • のようなデータ構造をブロックBlockingQueueし、コレクションに何かが現れたときにスレッドを起動します

  • Thread.join()別のスレッドで待機する

  • SemaphoreCountDownLatchCyclicBarrierおよび他の多くのJava 5 同時実行抽象化

于 2012-04-15T14:35:14.867 に答える
2

waitこれを行う通常の方法は、別のスレッドが通知できるオブジェクトを呼び出すことです。これはあなたのコードのパターンです:

public void run() {
    . . .
    // decide to suspend thread execution:
    synchronized (LOCK) {
        try {
            LOCK.wait();
        } catch (InterruptedException e) {
            // thread was interrupted -- time to return?
        }
    }
    // execution resumes here after interrupt or notify
}

次に、他のスレッドが次のコードを実行します。

synchronized (LOCK) {
    LOCK.notify(); // or notifyAll();
}

これらのコード フラグメントにLOCKは、両方のコードからアクセスできるオブジェクトがあります。ジョブを実行するために利用可能なオブジェクトを使用することが理にかなっている場合、別のオブジェクトは必要ありません。

于 2012-04-15T14:34:57.377 に答える
0

おそらく必要ですがObject.wait()Object.notifyAll()適切に使用するのは難しいことです。それを読んでください。良い情報源は、JoshBlochによるEffectiveJavaです。

于 2012-04-15T14:31:52.440 に答える