В чем преимущество синхронизации 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() несколько раз, чтобы обновить мой интерфейс, чтобы показать количество строк, которые я прочитал.

Другие вопросы по тегам