我有一个带有布尔字段“暂停”的线程,我用它来暂停线程。
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;
}
}
paused now 是一个布尔对象。执行按钮回调函数(调用 pause()、执行一些操作并调用 disablePause())的主 UI 线程等待直到我的自定义线程释放暂停(即在 while 循环的当前迭代结束时)。我仍然有一个疑问:这是一个好习惯吗?