Грациозное завершение работы SimpleAsyncTaskExecutorJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Грациозное завершение работы SimpleAsyncTaskExecutor

Сообщение Anonymous »

Spring Framework SimpleAsyncTaskExecutor позволяет отправленной задаче быть активной, пока исполнитель уже закрыт.
На первый взгляд, это происходит, когда при определенном, довольно редком чередовании потоков, новая отправленная задача добавляется в незащищенную коллекцию задач activeThreads, в то время как метод close уже обрабатывает элементы этой коллекции.
MRE предоставляет испытательный стенд для случай и эмулирует ситуацию, слегка изменяя исходный код SimpleAsyncTaskExecutor и обеспечивая чередование этих конкретных потоков. Результаты теста JCStress показывают, что, хотя процент соответствующего результата очень низок, доли процента, вероятность все равно больше нуля:

Код: Выделить всё

 RESULT    SAMPLES     FREQ      EXPECT  DESCRIPTION
0  1,970,950   99.83%  Acceptable  Task executes on active executor
1      3,341    0.17%   Forbidden  Task executes on closed executor
Javadoc SimpleAsyncTaskExecutor утверждает, что класс, даже если он не реализует интерфейс ExecutorService, обеспечивает корректное завершение работы.
Конечно, корректное завершение работы может иметь довольно широкое значение, но, например, ThreadPoolExecutor JDK не имеет этой проблемы. MRE также обеспечивает сравнение между двумя исполнителями.
Отсюда и вопрос:
Если разработчики SimpleAsyncTaskExecutor не намеревались реализовать такие сильные гарантии плавного завершения работы, как предоставляет ThreadPoolExecutor, не следует ли упомянуть этот факт в javadoc класса SimpleAsyncTaskExecutor, чтобы не делать этого сбить с толку пользователей, которые могли бы ожидать более серьезных гарантий?
Иначе следует ли считать эту ситуацию ошибкой?

Подробнее здесь: https://stackoverflow.com/questions/798 ... skexecutor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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