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