Consumer Thread IO Reactor Thread ---------------------------------------------------------- ---------------------------------------------------------- @Override public void setEvent(final int op) { lock.lock(); try { if (isStatusClosed()) { return; } @Override public void close(final CloseMode closeMode) { if (this.status.compareAndSet(Status.ACTIVE, Status.CLOSED)) { if (closeMode == CloseMode.IMMEDIATE) { try { this.channel.socket().setSoLinger(true, 0); } catch (final SocketException e) { // Quietly ignore } } this.key.cancel(); this.key.interestOps(this.key.interestOps() | op); } finally { lock.unlock(); } this.key.selector().wakeup(); } this.key.attach(null); Closer.closeQuietly(this.key.channel()); if (this.key.selector().isOpen()) { this.key.selector().wakeup(); } } }