Những công việc này
- Nó có nguồn gốc từ SingleThreadExecutor, nhưng bạn có thể điều chỉnh nó dễ dàng
- Mã Java 8 lamdas, nhưng dễ sửa
Nó sẽ tạo ra một Executor với một luồng duy nhất, có thể nhận được rất nhiều nhiệm vụ; và sẽ đợi cho hiện tại kết thúc thực hiện bắt đầu với tiếp theo
Trong trường hợp lỗi uncaugth hoặc ngoại lệ các uncaughtExceptionHandler sẽ bắt nó
lớp cuối cùng công khai SingleThreadExecutorWithExceptions {
công khai tĩnh ExecutorService newSingleThreadExecutorWithExceptions (chủ đề cuối cùng.UncaughtExceptionHandler unsaughtExceptionHandler) {
Nhà máy ThreadFactory = (Runnable runnable) -> {
chủ đề cuối cùng newThread = chủ đề mới (runnable, "SingleThreadExecutorWithExceptions");
newThread.setUncaughtExceptionHandler ((chủ đề cuối cùng caugthThread, có thể ném được cuối cùng) -> {
unsaughtExceptionHandler.uncaughtException (caugthThread, throwable);
});
trả về newThread;
};
trả về FinalizableDelegatedExecutorService
(ThreadPoolExecutor mới (1, 1,
0L, TimeUnit.MILLISECONDS,
LinkedBlockingQueue (),
nhà máy){
được bảo vệ void afterExecute (Runnable runnable, throwable throwable) {
super.afterExecute (runnable, throwable);
if (throwable == null && runnable instanceof Tương lai) {
thử {
Tương lai tương lai = (Tương lai) runnable;
if (tương lai.isDone ()) {
tương lai.get ();
}
} bắt (CancellingException ce) {
ném được = ce;
} Catch (ExecutException ee) {
throwable = ee.getCause ();
} Catch (InterruptedException tức là) {
Thread.cienThread (). Interrupt (); // bỏ qua / thiết lập lại
}
}
if (throwable! = null) {
unsaughtExceptionHandler.uncaughtException (Thread.cienThread (), có thể ném được);
}
}
});
}
lớp tĩnh riêng FinalizableDelegatedExecutorService
mở rộng DelegatedExecutorService {
FinalizableDelegatedExecutorService (giám đốc điều hành ExecutorService) {
siêu (chấp hành viên);
}
bảo vệ void hoàn thiện () {
super.shutdown ();
}
}
/ **
* Một lớp bao bọc chỉ hiển thị các phương thức ExecutorService
* của việc triển khai ExecutorService.
* /
lớp tĩnh riêng DelegatedExecutorService mở rộng AbstractExecutorService {
riêng ExecutorService e;
DelegatedExecutorService (ExecutorService execor) {e = execor; }
công khai void void (lệnh Runnable) {e.execute (lệnh); }
công khai void shutdown () {e.shutdown (); }
Danh sách công khai shutdownNow () {return e.shutdownNow (); }
công khai boolean isShutdown () {return e.isShutdown (); }
công khai boolean isTermined () {return e.isTermined (); }
boolean awaitTermination (thời gian chờ dài, đơn vị TimeUnit)
ném Interrupttedception {
trả lại e.awaitTermination (thời gian chờ, đơn vị);
}
công khai Tương lai (Nhiệm vụ có thể chạy) {
trả lại e.submit (nhiệm vụ);
}
công khai Tương lai (Nhiệm vụ có thể gọi) {
trả lại e.submit (nhiệm vụ);
}
công khai Tương lai (Nhiệm vụ có thể chạy, kết quả T) {
trả lại e.submit (nhiệm vụ, kết quả);
}
Danh sách công khai> invoke ALL (Bộ sưu tập> tác vụ)
ném Interrupttedception {
trả lại e.invoke ALL (nhiệm vụ);
}
Danh sách công khai> invoke ALL (Bộ sưu tập> tác vụ,
thời gian chờ lâu, đơn vị TimeUnit)
ném Interrupttedception {
trả lại e.invoke ALL (nhiệm vụ, thời gian chờ, đơn vị);
}
công khai T invokeAny (Bộ sưu tập> nhiệm vụ)
ném Interrupttedception, ExecutException {
trả lại e.invokeAny (nhiệm vụ);
}
công khai T invokeAny (Bộ sưu tập> nhiệm vụ,
thời gian chờ lâu, đơn vị TimeUnit)
ném Interrupttedception, ExecutException, TimeoutException {
trả lại e.invokeAny (nhiệm vụ, thời gian chờ, đơn vị);
}
}
private SingleThreadExecutorWithExceptions () {}
}