在重新启动时阻止使用ThreadPoolExecutor

时间:2015-05-06 10:28:20

标签: java android multithreading executorservice

在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将被锁定)。

我无法重构对执行程序的所有调用,我需要使执行程序线程安全。

由于我认为这是一种常见的情况,有没有逻辑方法可以做到这一点,我错过了?

0 个答案:

没有答案