当使用Java中的NIO套接字时,一旦我连接,我可以注册读取和写入操作,只要我收到写入通知就什么也不做,我在出站缓冲区中什么也没有,或者我可以注册仅读取通知并仅在出站缓冲区中放置某些内容时重新注册以进行读取和写入。我倾向于后者,但我关心两件事。
编辑:
实际上另一个发生在我身上。为了正常工作,我需要在将出站数据添加到套接字的线程中打开写入注册,并且在通信线程中,我需要在出站队列为空时关闭写入注册。但是,这会打开以下场景
IO Thread Other Thread
Check if buffer empty
Add Item to buffer
Register for write notification
Turn off write notifications
我认为避免这种情况的唯一方法是打开缓冲区本身的线程同步,以便修改(或检查)缓冲区并根据它修改注册成为原子操作。
答案 0 :(得分:0)
你基本上已经明白了。您希望打开和关闭写入兴趣,并且需要同步(或单线程)。
另一点:只要您在“其他线程”中锁定,就应该在开启兴趣之前尝试写作。通常,非阻塞写入将成功,您将获得效率。他们会为你赢得更多你想象的东西。