我想暂停执行新任务。 Official Documentation中提供的示例似乎也停止了当前执行的任务(尽管我很好奇它是如何在不中断线程的情况下执行的)。暂停执行使用ExectuorService的新线程
class PausableThreadPoolExecutor extends ThreadPoolExecutor {
private boolean isPaused;
private ReentrantLock pauseLock = new ReentrantLock();
private Condition unpaused = pauseLock.newCondition();
public PausableThreadPoolExecutor(...) { super(...); }
protected void beforeExecute(Thread t, Runnable r) {
super.beforeExecute(t, r);
pauseLock.lock();
try {
while (isPaused) unpaused.await();
} catch (InterruptedException ie) {
t.interrupt();
} finally {
pauseLock.unlock();
}
}
public void pause() {
pauseLock.lock();
try {
isPaused = true;
} finally {
pauseLock.unlock();
}
}
public void resume() {
pauseLock.lock();
try {
isPaused = false;
unpaused.signalAll();
} finally {
pauseLock.unlock();
}
}
}
新任务和当前任务有什么区别? –
使用不同的执行器 – zubergu
新任务是提交并且在队列中的任务。目前的任务是正在执行的任务(但尚未完成)。 –