用户端停止输入,服务端为何不进入循环?

来源:5-3 多人聊天室设计

Panda_io

2019-10-07

图片描述
老师reader.readLine()) == null的时候就表示用户断开了连接,用户没有输入数据但是一直在循环,我debug的时候发现当用户端停止输入数据的时候服务端没有进入循环,这原理是什么呢老师?是线程阻塞在那里了?麻烦老师讲一下底层实现,肯定还有很多小伙伴很懵逼。

写回答

1回答

从容但不淡定的某人

2019-10-12

    readline()方法底层实现是一个循环,但未满足退出循环条件(换行符\n或者到达buffer的最大大小(默认8 × 1024))时,会不停的尝试读取数并填充到buffer当中并更新buffer size,但此时无数据输入,那么就永远在阻塞在循环内部。

//img1.sycdn.imooc.com/szimg/5da15d7409f3562105610684.jpg    

    你可以尝试断点跟踪到readLine内部看下。

2
1
Panda_io
非常感谢您的热心,还给我截图了代码,感谢您!!!
2019-10-14
共1条回复

系统学习Java网络编程 深度理解BIO/NIO/AIO

对比式学习助你真正理解BIO/NIO/AIO三大网络编程模型。

880 学习 · 148 问题

查看课程