2016-01-09 7 views
3

Javadoc of Executor interface говорит следующее:Случается-до гарантии Executor.submit()

памяти непротиворечивости эффекты: действия в потоке до подачи Runnable объекта в Executor произойдет, до начала его исполнения, может быть, другой поток.

Какая часть спецификации языка Java гарантирует это? Или это только потому, что в реализациях используется некоторая внутренняя синхронизация? (Например, было бы замечательно, если бы это было так.) Значит, при реализации пользовательского Executor я должен знать об этом требовании?

+1

Ну, javadoc указывает его. JLS не указывает API. Он определяет язык. И да, если вы должны были выполнить Исполнителя, вам лучше соответствовать спецификациям интерфейса Executor. –

+0

Ну, в общем, язык гарантирует, что код, ограниченный потоком, выполняется последовательным образом. Невозможно было бы установить какие-либо действия - прежде чем отношения в противном случае в однопоточных приложениях. Поэтому приведенное выше утверждение не требует какой-либо спецификации по модели памяти (которая касается видимости и согласованности изменяемых данных между потоками). Вышеприведенное просто подкрепляет представление о том, что код, предшествующий представлению, будет выполнен до начала выполнения представления (даже если в другом потоке). – scottb

+0

@scottb Я не согласен. Если, например, рабочий поток непрерывно опросил ArrayList для новой задачи, у вас не было бы никаких действий - до гарантии: рабочий поток мог видеть новый элемент в списке, но в несогласованном состоянии. Поэтому разработчик должен проявлять осторожность, чтобы обеспечить эту гарантию (синхронизация и т. Д.) –

ответ

3

В JLS не указан API. Он определяет язык. Javadoc - это спецификация API.

И, таким образом, да, если вы должны были выполнить Исполнителя, вам лучше соответствовать спецификациям интерфейса Executor. Исполнитель должен позаботиться о том, чтобы представление произошло до выполнения выполнения задачи. Это не происходит само по себе. Требуется синхронизация (ожидание/уведомление, летучая запись/чтение и т. Д.).