我正在阅读Java中的扫描程序和BufferedReader之间的差异,而我无法理解的一点就是说
当BufferedReader为。
时,扫描程序未同步现在有人可以解释一下这意味着什么吗?
答案 0 :(得分:3)
从字面上看,它意味着它所说的。 BufferedReader
API的关键操作是使用synchronized
块实现的,而Scanner
中的等效操作则不是。
这意味着BufferedReader
可以安全地"在多个线程 1 之间共享,而Scanner
则不能。 Scanner
本质上是非线程安全的,即使它包装了一个线程安全的输入源。
1 - 实际上,这并不能免除你思考线程。如果您在同一read(...)
上有多个线程调用BufferedReader
操作而没有某种形式的协调,那么就无法知道哪个线程将从流中读取哪些字符。根据某些定义,这将使用法非线程安全。将字符配置到正确的线程通常对应用程序的正确性很重要。