【发布时间】:2016-05-24 11:32:41
【问题描述】:
我已经实现了一个 Singleton 类“SingleTaskExecutor”,它使用 SingleThreadExecutor 按顺序一次执行一个任务。此类用于按时间顺序执行异步数据库操作。一切正常。但是现在我们有一个用例,我们需要暂停此服务一段时间,执行一些操作,然后恢复服务。不确定如何暂停/恢复服务。这是我的代码:
public class SingleTaskExecutor {
private SingleTaskExecutor() {}
private final ExecutorService executor = Executors.newSingleThreadExecutor();
private static class LazyHolder {
private static final SingleTaskExecutor instance = new SingleTaskExecutor();
}
public static SingleTaskExecutor getInstance() {
return LazyHolder.instance;
}
public <T> Task<T> create(Callable<T> callable) {
Task<T> task = new Task<T>() {
@Override
protected T call() throws Exception {
return callable.call();
}
};
return task;
}
public <T> T execute(Task<T> task) {
return (T) executor.submit(task);
}
public void shutDown() {
executor.shutdown();
}
public void awaitTermination() {
try {
executor.awaitTermination(5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void waitPlease() {
try {
Thread.currentThread().wait();
//executor.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void resume() {
Thread.currentThread().notifyAll();
//executor.notifyAll();
}
}
【问题讨论】:
-
您不能暂停已启动的单个任务。您还没有展示任务是如何提交和排队的,但您可能应该让该代码在暂停时停止提交任务。
-
或者让您的任务检查布尔标志并在需要时等待。
-
Task
task = SingleTaskExecutor.getInstance().create(() -> { createOrUpdate(posOrder); return null; }); SingleTaskExecutor.getInstance().execute(task);任务.get();
标签: java multithreading concurrency java.util.concurrent