有关通过多个线程通过netty写入通道的查询

时间:2016-03-30 02:21:46

标签: java multithreading sockets netty

从服务器端的一个处理程序

中考虑这个方法
@Override
public void channelRead(final ChannelHandlerContext ctx, Object msg) throws Exception {

    try {
        io.netty.channel.ChannelFuture f = ctx.writeAndFlush("Executing command now...");
        System.out.println("command execution future - " + f);

        new Thread(new Runnable() {
            int i = 4;
            @Override
            public void run() {
                while(i >= 0 ) {
                    io.netty.channel.ChannelFuture f = ctx.writeAndFlush("beat till command");
                    System.out.println("beat till command future - " + f);
                    try {
                        Thread.sleep(6*1000);
                        i--;
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }

            }
        }).start();

        //assume some processing here
        Thread.sleep(20 * 1000);

    } catch (Exception e) {
        e.printStackTrace();
    }
    ctx.fireChannelRead(msg);
}


在上面的代码中,当我写入同一线程中的通道时,它会立即发送到客户端,即此消息ctx.writeAndFlush("Executing command now...")立即发送

但是当我从不同的线程尝试同样的事情时,它不会立即发送(ctx.writeAndFlush("beat till command"))。未来DefaultChannelPromise@5aa824c(incomplete)表明操作不完整。所有这些调用都是推迟的,我猜并在主线程完成后完成。为什么会这样? ctx上有些锁吗?
请告诉我,我在这里做错了什么?

0 个答案:

没有答案