1

スレッドを一時停止するために使用する「一時停止」ブール値フィールドを持つスレッドがあります。

public void run() {
    while (running) {
        if (!paused) {
            //HERE I do some operations
        }
    }
}

しかし、この解決策は私に問題を与えます:

「一時停止」フィールドにtrueを割り当てるボタンを押すと、一時停止する前のスレッドがifブロックのすべての操作を完了します。

スレッドを即座に一時停止するにはどうすればよいですか?

また

現在の繰り返しの最後にボタンのコールバックを強制的に実行するにはどうすればよいですか?

編集:

私はこの方法で解決しました:

public void run() {
    while (running) {
        synchronized(paused) {
            if (!paused) {
            //HERE I do some operations
            }
        }
    }
}

public void disablePause() {
    synchronized(paused) {
        paused = false;
    }
}

public void pause() {
    synchronized(paused) {
        paused = true;
    }
}

一時停止はブールオブジェクトになりました。ボタン コールバック関数 (pause() を呼び出し、いくつかの操作を実行し、disablePause() を呼び出す) を実行するメイン UI スレッドは、一時停止がカスタム スレッドによって解放されるまで待機します (これは、while ループの現在の反復の最後です)。私はまだ疑問を持っています: それは良い習慣ですか?

4

1 に答える 1