Как избежать беспорядка при вызове future.cancel ()? - PullRequest
0 голосов
/ 28 июня 2018

Вот эта вещь.

Во-первых, у меня есть пул потоков в Java (например, у пула потоков 8 потоков).

Во-вторых, у меня есть другой поток монитора, чтобы ограничить то, что время выполнения каждого потока в этом пуле не может превышать 5 минут с помощью метода future.cancel ().

Однако я выясняю потенциальный беспорядок в ситуации ниже.

Предположим, что поток t1 в этом пуле выполнен более 5 минут, и поток мониторинга наблюдал эту ситуацию. В то же время поток t1 завершил свою текущую вычислительную задачу и принял еще одну новую вычислительную задачу; Поток монитора вызывает файл future.cancel () для отправки сигнала прерывания в поток t1.

К сожалению, поток t1 проверяет свой сигнал прерывания и отменяет это новое задание, чего мы не ожидаем.

Вопрос в том, как избежать этой ситуации? Любой совет?

1 Ответ

0 голосов
/ 28 июня 2018

Похоже, вам нужна какая-то «атомарная» отмена задания. Но я не знаю, возможно ли это, поэтому у меня есть другая идея:

Вы можете использовать обратную логику, поэтому Monitor проверит время выполнения, а затем установит какой-то «флаг» в потоке. И поток может проверить этот флаг в своей логике выполнения задачи.

...