是缓冲读卡器线程安全吗? [英] is buffered reader thread safe?

查看:162
本文介绍了是缓冲读卡器线程安全吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有什么方法可以获得线程安全的缓冲读卡器。当我运行此代码时,我得到以下信息#

Is there any way i can get a thread safe buffered reader .I got the the following info when i ran this code#

Threadid=28 ObjectReference=de.factfinder.resource.Resource@1b7aeb4
Threadid=28 ObjectReference=java.io.InputStream@3d6fb9
Threadid=28 ObjectReference=java.io.InputStreamReader@171e0f6
Threadid=28 ObjectReference=java.io.BufferedReader@1684179
28 started Reading
Threadid=28 ObjectReference=de.factfinder.resource.Resource@1b7aeb4
Threadid=28 ObjectReference=java.io.InputStream@3d6fb9
Threadid=28 ObjectReference=java.io.InputStreamReader@171e0f6
Threadid=28 ObjectReference=java.io.BufferedReader@1684179
28 finished Reading
Threadid=38 ObjectReference=de.factfinder.resource.Resource@1bebf14
Threadid=38 ObjectReference=java.io.InputStream@3d6fb9
Threadid=38 ObjectReference=java.io.InputStreamReader@171e0f6
Threadid=38 ObjectReference=java.io.BufferedReader@1684179
38 started Reading
Threadid=38 ObjectReference=de.factfinder.resource.Resource@1bebf14
Threadid=38 ObjectReference=java.io.InputStream@3d6fb9
Threadid=38 ObjectReference=java.io.InputStreamReader@171e0f6
Threadid=38 ObjectReference=java.io.BufferedReader@1684179
38 finished Reading

缓冲读取器,InputStreamReader和InputStream的哈希码保持不变。为什么?

The hash codes for buffered reader , InputStreamReader and InputStream remains same.Why?

推荐答案


BufferedReader 线程安全?

javadoc没有说明BufferedReader是线程-safe,但是当我查看源代码时,我看到read方法使用 synchronize 和一个内部 lock 对象。 (您可以在 http:// www。 docjar.com/html/api/java/io/BufferedReader.java.html

The javadoc doesn't state the a BufferedReader is thread-safe, but when I look at the source code I see that the read methods use synchronize and an internal lock object. (You can check this for yourself at http://www.docjar.com/html/api/java/io/BufferedReader.java.html)

所以答案是(可能)是的,尽管它是可能取决于您使用的Java的实现和版本。

So the answer is (probably) yes, though it may depend on the implementation and version of Java that you are using.

但是,还有两件事需要考虑:

However, there are two other things to take into account:


  • A BufferedReader Reader的包装器,通常是其他类的包装器。如果其他线程使用相同I / O堆栈的部分,那么 BufferedReader 是线程安全的这一事实是不够的。

  • A BufferedReader is a wrapper for a Reader, which is typically a wrapper for other classes. If parts of the same "I/O stack" are used by other threads, the fact that BufferedReader is thread-safe is not sufficient.

如果你有两个线程试图从同一个 BufferedReader 读取,你可能会遇到麻烦,因为线程没有协调。虽然单个读操作的行为是原子的,但操作序列却没有。

If you have two threads both trying to read from the same BufferedReader you can get into trouble due to the threads not coordinating. While the individual read operations behave atomically, sequences of operations do not.

简而言之,线程安全不一定足以确保多线程应用程序不会出现问题。

In short, thread-safety is not necessarily sufficient to ensure that there won't be problems in a multi-threaded application.


BufferedReader的哈希码 InputStreamReader InputStream 保持不变。为什么?

The hash codes for BufferedReader, InputStreamReader and InputStream remains same. Why?

3个新对象具有与3个先前创建的对象相同的身份哈希码的概率非常小,所以我只能假设您每次创建新实例的假设/断言实际上是不正确的。

The probability of 3 new objects having the same identity hashcodes as 3 previously created objects is very small, so I can only assume that your assumption / assertion that you are creating new instances each time is in fact incorrect.

这篇关于是缓冲读卡器线程安全吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆