java 输入流FileInputStream中的read()方法,API的解释如下:
publicintread()throwsIOException从此输入流中读取一个数据字节。如果没有输入可用,则此方法将阻塞。阻塞是什么意思,我在使用过程中怎么没有感觉...
public int read() throws IOException从此输入流中读取一个数据字节。如果没有输入可用,则此方法将阻塞。
阻塞是什么意思,我在使用过程中怎么没有感觉到有"阻塞"发生呢?和SCOKET中的accept()的阻塞意思一样吗? 展开
阻塞是什么意思,我在使用过程中怎么没有感觉到有"阻塞"发生呢?和SCOKET中的accept()的阻塞意思一样吗? 展开
2个回答
展开全部
阻塞是JAVA多线程编程的一个状态,当FileInputStream在执行read()方法的时候,CPU就留出时间块来执行这个方法,这时间里别的方法就只能等待,当read方法阻塞的时候,就会有另一个方法开始执行。
至于你感觉不到,那是多线程的表现形式,就是为了让你感觉不到。当有多个方法需要执行的时候,单线程机会依次执行,多线程机则会将CPU分成多个时间片,在不同的时间片里执行不同的方法,给人的感觉就是多个方法同时在执行。
至于你感觉不到,那是多线程的表现形式,就是为了让你感觉不到。当有多个方法需要执行的时候,单线程机会依次执行,多线程机则会将CPU分成多个时间片,在不同的时间片里执行不同的方法,给人的感觉就是多个方法同时在执行。
追问
是不是可以这样理解,当FileInputStream在执行read()方法的时候,其他线程是插不进去的直到read()方法执行完毕。
追答
其实不一定会一次性执行完毕,可能会分多次,但read方法在执行的时候,其他线程就只能是等待,在只有一个CPU的情况下同一时间段只能有一个线程是执行状态,但可以有多个线程是可执行状态,其实就是在等待。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询