На некоторых компьютерах такой код отклоняет вторую задачу:< /p>
Код: Выделить всё
ThreadPoolExecutor exe = ThreadPoolExecutor(1, 1, 0L, TimeUnit.SECONDS, new SynchronousQueue());
Future future = exe.submit(task1);
while (!future.isDone()) {
//do something, wait for result
sleep(1);
}
Future future = exe.submit(task2); // Sometimes it rejects the task
UPD: трассировка стека
Код: Выделить всё
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ExecutorCompletionService$QueueingFuture@8c1e52e[Not completed, task = java.util.concurrent.Executors$RunnableAdapter@6cdbdc4f[Wrapped task = java.util.concurrent.FutureTask@2aa7cf9b[Not completed, task = com.my.example.DatabaseValue$$Lambda$1438/0x0000000840650440@6c918fb6]]] rejected from java.util.concurrent.ThreadPoolExecutor@3aca79dd[Running, pool size = 1, active threads = 0, queued tasks = 0, completed tasks = 592]
at java.base/java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2055)
at java.base/java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:825)
at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1355)
at java.base/java.util.concurrent.ExecutorCompletionService.submit(ExecutorCompletionService.java:184)
...
Подробнее здесь: https://stackoverflow.com/questions/790 ... avoid-this
Мобильная версия