在Android应用程序中,我有一个执行后台线程的ThreadPoolExecutor。大多数请求都是从UI线程调用的,例如:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
executor.execute(runnable);
}
当用户从我的应用程序注销时出现问题,在注销过程中我关闭了此执行程序,然后再次创建它以确保在新用户登录时没有正在运行的任务。
void logout(){
executor.shutdownNow();
ExecutorServiceUtils.waitForTermination(executor);
executor = new ScheduledThreadPoolExecutor(THREAD_POOL_SIZE);
}
在某些情况下,我正处于竞赛状态,当执行器“重新启动”时,UI会尝试执行execute()。为了防止这种情况,我想阻止UI在执行程序重启时执行任务。当然我可以用任何Java的障碍锁定UI线程,例如锁,同步,信号量,但我认为这不是一个好方法(UI将被锁定)。
我无法重构对执行程序的所有调用,我需要使执行程序线程安全。
由于我认为这是一种常见的情况,有没有逻辑方法可以做到这一点,我错过了?