В чем преимущество синхронизации InputStream?
Я недавно использовал класс Apache Commons-IO CountingInputStream
, Он просто отслеживает, сколько байтов было прочитано, обновляя поле счетчика.
Я заметил, что он обновляет свой счетчик с synchronized
ключевое слово. Лучший источник, который я смог найти, это IO-201, но он не объясняет почему.
Я читал в нескольких местах, что код Apache Commons хорошего качества, но теперь мне интересно, почему они синхронизировали методы в InputStream. Я не верю, что безопасность потока является полезным свойством в потоке, как и комментаторы IO-201.
Учитывая, что я не обращаюсь к InputStream одновременно, есть ли веская причина для синхронизации его методов? Или есть действительный вариант использования для одновременного доступа к InputStream, который не будет создавать мусор данных?
1 ответ
Учитывая, что у меня нет доступа к
InputStream
одновременно есть ли веская причина для синхронизации его методов?
Нет, у вас нет веских причин использовать синхронизированные методы для объектов, к которым вы обращаетесь только из одного потока. При этом вы используете сторонний код, который выполняет синхронизацию для защиты изменяемого состояния (count
поле), так что у вас нет особого выбора, кроме как реализовать его самостоятельно.
Или есть действительный вариант использования для доступа к
InputStream
одновременно, который не будет производить мусор данных?
InputStream
? Возможно нет. CountingInputStream
? Конечно... в одну ветку звоню CountingInputStream.read()
многократно потреблять поток, а в другой поток звоню CountingInputStream.getCount()
несколько раз, чтобы обновить мой интерфейс, чтобы показать количество строк, которые я прочитал.