Является ли BufferedReader
потокобезопасным?
Javadoc не утверждает, что BufferedReader является поточно-ориентированным, но когда я смотрю на исходный код, я вижу, что методы чтения используют synchronize
и внутренний lock
объект. (Вы можете проверить это сами на http://www.docjar.com/html/api/java/io/BufferedReader.java.html)
Таким образом, ответ (вероятно) да, хотя может зависеть от используемой вами реализации и версии Java.
Однако есть еще две вещи, которые необходимо учитывать:
A BufferedReader
- это оболочка для Reader
, которая обычно является оболочкой для других классов. Если части одного и того же «стека ввода-вывода» используются другими потоками, того факта, что BufferedReader
является потокобезопасным, недостаточно.
Если у вас есть два потока, которые пытаются прочитать с одного и того же BufferedReader
, вы можете столкнуться с проблемами из-за того, что потоки не координируются. В то время как отдельные операции чтения ведут себя атомарно, последовательности операций - нет.
Короче говоря, потокобезопасность не обязательно достаточна, чтобы не было проблем в многопоточном приложении.
Хеш-коды для BufferedReader
, InputStreamReader
и InputStream
остаются неизменными. Почему?
Вероятность того, что 3 новых объекта будут иметь такие же хэш-коды идентичности, что и 3 ранее созданных объекта, очень мала, поэтому я могу только предположить, что ваше предположение / утверждение, что вы создаете новые экземпляры каждый раз, на самом деле неверно.