Безопасный поток SerializableFunction в облачном потоке данных

Я реализую интерфейс SerializableFunction и хочу повторно использовать некоторые дорогостоящие вспомогательные объекты, которые я создаю в конструкторе. Когда этот класс используется в задании потока данных, создается ли/клонируется новый экземпляр для каждого потока, который его использует?

Спасибо, Геннадий


person G B    schedule 06.01.2015    source источник


Ответы (1)


Краткий ответ
SerializableFunction не обязательно должен быть потокобезопасным, поскольку каждый поток получает свой собственный десериализованный экземпляр. Любые ссылки, к которым он обращается в общей области (например, через статические методы/статические ссылки/...), должны быть потокобезопасными.

Подробный ответ
SerializableFunction сериализуется с использованием механизма сериализации объектов Java и сохраняется как часть спецификации потока данных. В зависимости от спецификации и того, как она оптимизирована, SerializableFunction, скорее всего, будет разбита на несколько единиц работы. Затем каждая рабочая машина может запросить 1 или более единиц работы, которые они обрабатывают параллельно. Каждая единица работы будет использовать механизм сериализации объектов Java для воссоздания экземпляра SerializableFunction. Каждому потоку назначается только одна единица работы. Обратите внимание, что даже несмотря на то, что каждая единица работы назначена одному потоку, если дорогостоящие вспомогательные объекты не являются частью SerializableFunction и вместо этого доступны через другой метод, например, через статическую ссылку/метод, то дорогостоящие вспомогательные объекты могут по-прежнему совместно использоваться несколько экземпляров одной и той же SerializableFunction в рабочем потоке.

person Lukasz Cwik    schedule 06.01.2015