我已經實現了一個Singleton類「SingleTaskExecutor」,它使用SingleThreadExecutor一次執行一個任務。該類用於按時間順序執行異步數據庫操作。一切工作正常。但是現在我們有一個用例,我們需要暫停該服務一段時間,執行一些操作,然後恢復服務。不知道如何暫停/恢復服務。這裏是我的代碼:如何在Java中暫停/重新啓動SingleThreadExecutor(ExecutorService)?
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();
}
}
您無法掛起已經啓動的單個任務。您沒有展示如何提交任務並排隊,但您應該讓該代碼在暫停時停止提交任務。 –
或者讓你的任務檢查布爾標誌並在需要時等待。 – assylias
任務任務= SingleTaskExecutor.getInstance()創建。(() - > { \t \t \t createOrUpdate(posOrder); \t \t \t返回NULL; \t \t}); \t \t \t \t SingleTaskExecutor.getInstance()。execute(task); \t \t task.get(); –