【发布时间】:2011-12-01 13:31:06
【问题描述】:
有什么方法可以获得线程安全的缓冲阅读器。我在运行此代码时得到了以下信息#
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
buffered reader 、 InputStreamReader 和 InputStream 的哈希码保持不变。为什么?
【问题讨论】:
-
有点略过细节,但你不能只创建一个线程安全的包装类吗?
-
如果 InputStream 相同,我认为 BufferedReader 的哈希码可能相同。你也可以试着更好地解释一下情况吗?很难给出一个合适的答案。
-
reader等是静态的还是那些局部变量?您如何创建该输出?哈希码应该为每个新对象和使用构造函数的 AFAIK 更改,不可能创建已经存在的对象(除非在某些本机代码中发生,但我怀疑BufferedReader等的情况)。 -
这里似乎有两个问题...哈希码和线程安全之间有什么关系?
-
如果这是一个局部变量,您能否发布调用此方法的代码以及生成您发布的输出的代码?
标签: java multithreading bufferedreader