为什么selector.select()和下面的注册会出现线程安全问题

来源:7-10 NIO服务器Thread优化-4

慕瓜2362174

2022-06-26

老师 为什么selector.select()和下面的注册会出现线程安全问题

写回答

1回答

Qiujuer

2022-07-01

selector.select()

内部会占用队列锁,然后去阻塞获取消息,直到有新消息到达;而注册或取消注册会更改队列,所以两个都需要操作到同一个锁,所以存在竞争问题。

0
2
Qiujuer
回复
慕瓜2362174
课程的处理是这样的,其实本质上并不是竞争的问题,selector比较特殊,selector.select()会占用锁,不释放,如果没有新的内容到达就不会被唤醒;从而导致其他的注册操作没法进行;所以只能唤醒。
2022-07-06
共2条回复

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2324 学习 · 476 问题

查看课程