public class IOtest{
public static void main(String[] args){
try{
ServerSocket server=new ServerSocket(8888);
Socket clist=server.accept();
BufferedReader reader=new BufferedReader(new InputStreamReader(clist.getInputStream()));
/*为收到IO请求时阻塞*/
System.out.println(reader.readLine());
}catch(Exception e) {
}
}
}
根据io的工作内容将其划分为IO请求和IO操作连个部分.上述代码示例 中采用的是阻塞IO,可以明确的发现客户端握手成功后,如果服务端并没有收到客户端的 IO 请求,服务端会在reader.readLine()方法处发生阻塞,直到成功接收到IO请求后,服务端才会开始执行实际的IO操作.运用阻塞IO模式进行分布式编程,为了保证服务端与客户端集合的成功会话,我们不得不为每一条客户端连接都开辟独立的线程执行IO操作,当然在实际的开发过程中,这样会大大的降低系统的性能.
非阻塞IO和阻塞IO最大的不同在于,非阻塞IO并不会在IO请求时产生阻塞,也就是说如果服务器没有收到IO请求时,非阻塞IO会"持续轮询"IO请求,当有请求进来后就开始执行IO操作并阻塞请求进程.java7之后允许开发人员使用IOCP AP{进行异步IO编程,使得开发人员不必再关心IO是否阻塞,因为程序中所有的IO操作将全部委托给操作系统线程去执行,直到最后通知并返回结果.