Параллельность Java на практике 7.2.5 Получите список отмененных задач, которые были в процессе, когда исполнитель был зJAVA

Программисты JAVA общаются здесь
Anonymous
Параллельность Java на практике 7.2.5 Получите список отмененных задач, которые были в процессе, когда исполнитель был з

Сообщение Anonymous »

Листинг 7.21 Executorservice, который отслеживает отмененные задачи после выключения.public class TrackingExecutor extends AbstractExecutorService {
private final ExecutorService exec;
private final Set tasksCancelledAtShutdown =
Collections.synchronizedSet(new HashSet());

public TrackingExecutor(ExecutorService exec) {
this.exec = exec;
}

public void shutdown() {
exec.shutdown();
}

public List shutdownNow() {
return exec.shutdownNow();
}

public boolean isShutdown() {
return exec.isShutdown();
}

public boolean isTerminated() {
return exec.isTerminated();
}

public boolean awaitTermination(long timeout, TimeUnit unit)
throws InterruptedException {
return exec.awaitTermination(timeout, unit);
}

public List getCancelledTasks() {
if (!exec.isTerminated())
throw new IllegalStateException(/*...*/);
return new ArrayList(tasksCancelledAtShutdown);
}

public void execute(final Runnable runnable) {
exec.execute(new Runnable() {
public void run() {
try {
runnable.run();
} finally {
if (isShutdown()
&& Thread.currentThread().isInterrupted())
tasksCancelledAtShutdown.add(runnable);
}
}
});
}
}
< /code>
Записано в книге: < /p>

Trackingexecutor имеет неизбежное условие гонки, которое может заставить его дать ложные положительные результаты: задачи, которые идентифицируются как отмененные, но фактически завершенные. Это Овс, потому что пул потоков может быть выключен между при выполнении последней инструкции задачи, и когда пул записывает задачу как полную.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... ch-were-in

Вернуться в «JAVA»