我见过很多JavaNio示例。所有这些都在选择器线程中设置SelectionKey的interestOps。
他们为什么这样做? 在选择器线程以外的其他线程中设置SelectionKey的interestOps是否安全?
或者有可能发生的异常情况,所以他们这样做了吗?
答案 0 :(得分:1)
读取和写入兴趣集的操作通常将与选择器的某些操作同步。具体如何执行此同步依赖于实现:在一个简单的实现中,如果选择操作已在进行中,则读取或写入兴趣集可能会无限期地阻塞;在高性能实现中,如果有的话,读取或写入兴趣集可能会暂时阻止。
结合墨菲定律,它实际上保证你只会遇到“天真”的实现,所以最好是安全而不是抱歉,只能从选择器线程中使用兴趣操作,保证不会阻塞。