Java输入流“阻塞”和多线程

时间:2011-11-06 22:09:56

标签: java multithreading stream io

似乎找不到任何关于输入流“阻塞”的内容,它描述了它的内容和发生的时间。这是某种类型的多线程防止并发线程访问同一个流吗?

注意,当两个并发线程同时访问同一个流时,这会导致问题,还是两个线程都获得自己的流指针?显然,人们需要等待,但希望它不会导致未经检查的异常。

3 个答案:

答案 0 :(得分:5)

“阻塞”是指读取或写入挂起,同时在将控制权返回给调用线程之前等待更多信息(用于读取)或某些内部缓冲区中的更多空间(用于写入)。

我非常确定流对象会处理它自己的读/写位置,因此指针只指向流对象,它从自己的缓冲区读取。因此,如果您正在使用同步方法进行阅读,那么每次阅读都会轮流等待,并获得有凝聚力(但不重叠)的数据。如果方法不同步,那么我很确定一切都会破裂。

答案 1 :(得分:3)

在输入流的上下文中,“阻塞”通常是指等待更多数据变为可用的流。如果你考虑套接字而不是文件,这个术语可能更有意义。

如果有多个线程同时从同一个流中读取,则必须进行自己的同步。没有特定于线程的“流指针”。再想一想,从同一个套接字(而不是文件)读取多个线程。

答案 2 :(得分:2)

每个都有一个流指针。让两个线程读取相同的流没有多大意义。