JAVA socket 开发知识点

1 channel.register(selector, SelectionKey.OP_READ) 和 key.interestOps(SelectionKey.OP_WRITE)有什么区别?

首先看看register源代码:

public final SelectionKey register(Selector sel, int ops, Object att) throws ClosedChannelException

{

            if (!isOpen()) throw new ClosedChannelException();

            if ((ops & ~validOps()) != 0)

             throw new IllegalArgumentException();

            synchronized (regLock)

           {

                     if (blocking) throw new IllegalBlockingModeException();

                     SelectionKey k = findKey(sel);

                     if (k != null)

                     {    

                                 k.interestOps(ops); k.attach(att);

                      }

                     if (k == null)

                      { // New

                                    registration k = ((AbstractSelector)sel).register(this, ops, att);

                                   addKey(k);

                       }

                       return k;

              }

 }

           从红色代码只注册会判断每次是否已经注册过,那么在实际程序开发中,当一件事情已经注册过时,下次通过调用 key.interestOps()来进行感兴趣事件的切换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值