为什么每次read之后都要调用这个方法重新注册一次呢?
来源:2-1 什么是网络编程?
qq_慕前端1318791
2021-08-20

写回答
2回答
-
Qiujuer
2021-08-30
因为我们的Select线程与后面处理任务的线程并不是同一个线程,所以得到事件后如果不取消注册则会导致Select线程,反复的得到事件就绪的通知,从而导致处理任务的线程中出现n个同样的任务;也就会导致后面的数据处理出现异常,因为数据本身是有序的,并不能混乱,所以这里不能进行多线程同时收发。
这里的数据是指单链接的数据本身,而不是多链接。多个链接之间相互是无感的,可并发的;但在一个链接内部的数据应该保持其有序性。
关于你说的锁粒度大导致的效率问题,的确存在,后面的课程也有这块儿的优化,可以继续往后看看哈。
00 -
qq_慕前端1318791
提问者
2021-08-20
我自己又多看了几遍代码明白了。因为在handleSelection方法中,为了防止重复读取同一消息,取消了监听,所以这里要重新注册监听。但这样重复上锁,而且感觉锁的粒度挺大的,会不会影响效率啊。
00
相似问题