TLDR; Да, статические методы ImageIO.read(...)
и write(...)
являются потокобезопасными.
Часть спецификации, которая говорит "thread safety is not a goal" потребности следует рассматривать в контексте. То, что на самом деле говорит спецификация, заключается в том, что отдельные версии ImageReader
, ImageWriter
или ImageInputStream/ImageOutputStream
не должны заботиться о безопасности потоков (и, как результат, клиентский код никогда не должен считать, что они потокобезопасны). Пока вы живете по этому правилу, вы в безопасности. Однако обратите внимание, что в той же части спецификации также указано, что:
[...] должно быть возможно одновременное использование нескольких экземпляров одного и того же подключаемого модуля.
Эта часть спецификации не обсуждать статические методы ImageIO
особенно, но выше цитаты следует, что Теза метода поточно как ImageIO.read(...)
и write(...)
создает новые экземпляры ImageInputStream
/ImageOutputStream
и ImageReader
/ImageWriter
для каждого призывание. Таким образом, это действительно не «несмотря на то, что спецификация говорит«.
Класс ImageIO
состоит из нескольких других статических методов, которые могут быть безопасными в использовании, а сам класс является (главным образом *) безстоящим. Если это не работает таким образом, это не будет действительно много пользы ...
IIORegistry
экземпляр ImageIO
заполняется во время создания класса, и повторно инициализируется каждый раз, когда метод scanForPlugins()
вызывается. У вас могут возникнуть проблемы (например, плагины могут быть неправильно зарегистрированы), если два потока вызывают его в одно и то же время, но в качестве контроля кода клиента, где/когда это происходит, вы можете легко избежать этого. Существует также группа потоков CacheInfo
, но ее использование, по-видимому, правильно синхронизировано.
Отказ от ответственности, я не писала спецификации, но это моя интерпретация (и я использовал ImageIO
в бесчисленных, многопоточных приложениях, а также написал дюжину ImageReader
и ImageWriter
плагины сам) ,
Спасибо за ваш ответ, @ user3087839, но "скорее всего" не достаточно для меня ... – Alex