Значение сканера не синхронизировано

Я изучал различия между сканером и BufferedReader в Java, и одна вещь, которую я не мог понять, заключалась в том, что

Сканер не синхронизируется, пока BufferedReader работает.

Теперь кто-нибудь может объяснить, что это значит?

1 ответ

Решение

Буквально это означает, что это говорит. Основные операции BufferedReader API реализованы с использованием synchronized блоки и эквивалентные операции в Scanner не.

Это означает, что BufferedReader может быть безопасно разделен между несколькими потоками 1, тогда как Scanner не могу. Scanner по своей природе не является потокобезопасным, даже если он содержит потокобезопасный входной источник.


1 - На самом деле, это не освобождает вас от мысли о потоке. Если у вас есть несколько потоков, вызывающих read(...) операции на том же BufferedReader без какой-либо формы координации невозможно определить, какой поток будет читать какие символы из потока. По некоторым определениям, это сделало бы использование не потокобезопасным. Расположение символов в правильных нитях, как правило, важно для правильности применения.

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