java 监听堵塞_在Java的NIO编程中,在SelectionKey.ACCEPT事件监听处理中,使用阻塞和非阻塞对效率影响大吗?...

对Accept事件的处理是注册产生的SocketChannel进入Selector监听,对输入输出的等待并不存在,所以是不是就没有区别?也就是说可以使用下面的方式进行处理,// Create a new server socket

_acceptChannel = ServerSocketChannel.open();

// Set to blocking mode

_acceptChannel.configureBlocking(true);

启动一个不断轮询的while循环,while (isRunning() && getConnection() != null)

{

try

{

accept(_acceptor);

}

catch (EofException e)

{

LOG.ignore(e);

}

catch (IOException e)

{

LOG.ignore(e);

}

catch (InterruptedException x)

{

// Connector has been stopped

LOG.ignore(x);

}

catch (Throwable e)

{

LOG.warn(e);

}

}

将接受到的链接请求派发到其他的Selector线程中取就可以了,这样Accepter线程根本不用绑定Selector了/* ------------------------------------------------------------ */

@Override

public void accept(int acceptorID) throws IOException

{

ServerSocketChannel server;

synchronized(this)

{

server = _acceptChannel;

}

if (server!=null && server.isOpen() && _manager.isStarted())

{

SocketChannel channel = server.accept();

channel.configureBlocking(false);

Socket socket = channel.socket();

configure(socket);

_manager.register(channel);

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值