2016-04-17 2 views
0

я шел через различие между сканером и BufferedReader в Java и один момент, который я не мог понять, что сказалЗначения сканера не синхронизировано

Сканер не синхронизирован во время BufferedReader есть.

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

+1

http://stackoverflow.com/questions/2231369/scanner-vs-bufferedreader вопрос уже задан до – Priyamal

+1

[Вот объяснение] (https://docs.oracle.com/javase/tutorial/essential/ concurrency/sync.html) синхронизации в Java. Но где именно вы видели эту цитату? – shmosel

+0

Я не спрашиваю разницу между сканером и BufferedReader. Я спрашиваю, что означает синхронизация BufferedReader, а не сканера. Теперь понятно? –

ответ

2

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

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


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

+0

Для определенного, не обязательно интуитивного определения «безопасно». И, конечно же, «Сканер» можно безопасно распределять между несколькими потоками, для другого определения «безопасно», которое связано с внешней синхронизацией. –

+0

@JohnBollinger - Я добирался туда .... –

Смежные вопросы