java吧 关注:1,283,844贴子:12,804,837
  • 8回复贴,共1

【求大佬指点NIO多线程】【求大佬指点NIO多线程】

只看楼主收藏回复

楼主这边是这样,楼主是服务端,然后有一个selector,上面注册了多个channel,每个channel有一个对应的selectionKey,单线程轮询,然后accept或者read都没有问题,然后楼主尝试在read的时候,开启新线程,现在出现问题了,开启read新线程后,轮询会继续轮到这个key,导致客户端只往通道发一次,我read多次,,,,接着百度,尝试在开启新线程前,改变key的状态或者直接取消对key的监听,这样的确能保证,客户端发一次我读一次,但是当客户端发完一次,继续往我通道发东西时,我这边轮询不到了,得客户端重新连接重新注册,生成新的key,,,,,,....如何能保证他们同步啊


1楼2019-11-07 14:57回复
    up


    2楼2019-11-07 15:00
    回复
      2025-10-21 05:34:17
      广告
      不感兴趣
      开通SVIP免广告
      up


      3楼2019-11-07 15:00
      回复
        up


        4楼2019-11-07 16:39
        回复
          默默围观等结果


          来自Android客户端5楼2019-11-07 19:15
          回复
            阻塞队列可以吗,pipe


            来自Android客户端6楼2019-11-07 19:19
            回复
              nio是调节读写和cpu的矛盾,加个阻塞队列,生产者和消费者模式应该可以吧,没写过。貌似netty就是pipe模式


              来自Android客户端7楼2019-11-07 19:26
              收起回复
                NIO是单线程的,你新开一个线程用来read,就变成异步执行了,主线程还是会一直执行下去(循环执行),所以会read多次(还会继续创建线程呢),要么像你最后说的那样,否则真要玩个异步线程read的话,用future,阻塞住主线程。(不过没什么卵意思),玩NIO,直接上netty才是王道。JDK的NIO,非常不好搞,放到生产上会出很多bug 的


                IP属地:广东8楼2020-02-24 06:37
                回复