スレッドを一時停止するために使用する「一時停止」ブール値フィールドを持つスレッドがあります。
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 ループの現在の反復の最後です)。私はまだ疑問を持っています: それは良い習慣ですか?