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);

}

}

}

}

}

相关推荐
wuminyu32 分钟前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
callJJ2 小时前
Spring Data Redis 两种编程模型详解:同步 vs 响应式
java·spring boot·redis·python·spring
千寻girling3 小时前
《 Git 详细教程 》
前端·后端·面试
wbs_scy3 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
jinanwuhuaguo4 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
xmjd msup5 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
Cosolar5 小时前
一文吃透 LangChain&LangGraph:设计理念、框架结构与内部组件全拆解
人工智能·面试·架构
952365 小时前
SpringBoot统一功能处理
java·spring boot·后端
Lyyaoo.5 小时前
优惠券秒杀业务分析
java·开发语言
消失的旧时光-19435 小时前
统一并发模型:线程、Reactor、协程本质是一件事(从线程到协程 · 第6篇·终章)
java·python·算法