Значение сканера не синхронизировано
Я изучал различия между сканером и BufferedReader в Java, и одна вещь, которую я не мог понять, заключалась в том, что
Сканер не синхронизируется, пока BufferedReader работает.
Теперь кто-нибудь может объяснить, что это значит?
1 ответ
Буквально это означает, что это говорит. Основные операции BufferedReader
API реализованы с использованием synchronized
блоки и эквивалентные операции в Scanner
не.
Это означает, что BufferedReader
может быть безопасно разделен между несколькими потоками 1, тогда как Scanner
не могу. Scanner
по своей природе не является потокобезопасным, даже если он содержит потокобезопасный входной источник.
1 - На самом деле, это не освобождает вас от мысли о потоке. Если у вас есть несколько потоков, вызывающих read(...)
операции на том же BufferedReader
без какой-либо формы координации невозможно определить, какой поток будет читать какие символы из потока. По некоторым определениям, это сделало бы использование не потокобезопасным. Расположение символов в правильных нитях, как правило, важно для правильности применения.