java面试-0136-BIO、NIO、AIO区别?

BIO:同步阻塞模型。线程处理I/O请求时会阻塞(accept、read、write阻塞)。实现模式为一个线程处理一个连接,可用线程池优化。适合连接数少,并发量低的场景。如简单的文件传输。基于Socket和ServerSocket

NIO:同步非阻塞模型。通过Selector轮询通道Channel,非阻塞读写数据(select阻塞,accept、read、write非阻塞)。实现模式为一个线程通过seletor管理多个连接,适合高并发I/O 密集型的场景。如Web 服务器、实时通信系统。基于SocketChannel和ServerSocketChannel

AIO:异步非阻塞模型。基于事件驱动,I/O 操作由操作系统完成,通过回调(如 CompletionHandler)或Future返回结果。适合连接数较多且连接时间长的场景,如大型分布式系统

import java.net.;import java.nio. ;import java.nio.channels.;import java.util. ;

public class NIOServer{

public static void main(String[]a)throws Exception{

Selector s=Selector.open();

ServerSocketChannel ss=ServerSocketChannel.open();

ss.bind(new InetSocketAddress(9999));ss.configureBlocking(false);

ss.register(s,SelectionKey.OP_ACCEPT);

while(true){

s.select();

for(Iteratorit=s.selectedKeys().iterator();it.hasNext()😉{

SelectionKey k=it.next();it.remove();

if(k.isAcceptable()){

SocketChannel c=ss.accept();c.configureBlocking(false);

c.register(s,SelectionKey.OP_READ);

}else if(k.isReadable()){

SocketChannel c=(SocketChannel)k.channel();

ByteBuffer b=ByteBuffer.allocate(1024);

if(c.read(b)==-1){c.close();continue;}

b.flip();c.write(b);

}

}

}

}

}

相关推荐
boooooooom1 小时前
讲清 Proxy + effect + track/trigger 流程
javascript·vue.js·面试
架构师沉默1 小时前
别又牛逼了!AI 写 Java 代码真的行吗?
java·后端·架构
豆苗学前端2 小时前
彻底讲透浏览器缓存机制,吊打面试官
前端·javascript·面试
zone77392 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
swipe2 小时前
箭头函数与 this 面试题深度解析:从原理到实战
前端·javascript·面试
swipe5 小时前
深入理解 JavaScript 中的 this 绑定机制:从原理到实战
前端·javascript·面试
豆苗学前端5 小时前
彻底讲透浏览器渲染原理,吊打面试官
前端·javascript·面试
后端AI实验室6 小时前
我把一个生产Bug的排查过程,交给AI处理——20分钟后我关掉了它
java·ai
Hilaku7 小时前
在 HTTP/3 普及的 2026 年,那些基于 Webpack 的性能优化经验,有一半该扔了
前端·javascript·面试
凉年技术8 小时前
Java 实现企业微信扫码登录
java·企业微信