在我的一个项目中,我需要一个无限循环。要退出循环,唯一的条件是在其他某个线程上设置flag = true
。
flag = false;
While(true) {
if (flag) break;
}
使用计时器突破循环的推荐方法是什么?比如,如果在接下来的500ms内,标志未设置为true,则强制退出循环。
答案 0 :(得分:1)
您可以使用Handler.postDelayed()
。请注意,我特意使用Looper.getMainLooper()
作为Handler
的主题,因为我假设您正在后台线程上执行无限循环。如果你在主线程上循环,这可能不是一个好主意,你将不得不更新Handler
以使用不同线程的Looper
。
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
flag = true;
}
}, 500);
另一种选择是创建一个新的Thread
,在所需的时间内休眠,然后相应地设置标志。
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
Log.e("Timeout Thread", "Interrupted", e);
}
flag = true;
}
}).start();