java 输入流FileInputStream中的read()方法,API的解释如下:

public int read() throws IOException从此输入流中读取一个数据字节。如果没有输入可用,则此方法将阻塞。

阻塞是什么意思,我在使用过程中怎么没有感觉到有"阻塞"发生呢?和SCOKET中的accept()的阻塞意思一样吗?

阻塞是JAVA多线程编程的一个状态,当FileInputStream在执行read()方法的时候,CPU就留出时间块来执行这个方法,这时间里别的方法就只能等待,当read方法阻塞的时候,就会有另一个方法开始执行。
至于你感觉不到,那是多线程的表现形式,就是为了让你感觉不到。当有多个方法需要执行的时候,单线程机会依次执行,多线程机则会将CPU分成多个时间片,在不同的时间片里执行不同的方法,给人的感觉就是多个方法同时在执行。追问

是不是可以这样理解,当FileInputStream在执行read()方法的时候,其他线程是插不进去的直到read()方法执行完毕。

追答

其实不一定会一次性执行完毕,可能会分多次,但read方法在执行的时候,其他线程就只能是等待,在只有一个CPU的情况下同一时间段只能有一个线程是执行状态,但可以有多个线程是可执行状态,其实就是在等待。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-27
阻塞就是一直等待的意思,你的理解是对的,和SCOKET中的accept()的阻塞意思一样,没有阻塞是因为有字节可读,如果你的系统文件操作很频繁,这个是会一直等待,直到读出字节以后返回的。
相似回答