通道注册期间的线程块

时间:2019-03-05 06:04:30

标签: java netty

我的应用程序运行一段时间后,我的线程在等待Channel注册时陷入困境。

代码如下:

bootstrap = new Bootstrap()
    .group(new EpollEventLoopGroup())
    .channel(EpollSocketChannel.class)
    .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
    .handler(new MyChannelInitializer(this));

ChannelFuture registerFuture = bootstrap.register().sync();
Channel channel = registerFuture.channel();

//Do other stuffs

channel.connect(...).addListener(...);

运行一段时间后,线程在sync()期间阻塞。

这是堆栈跟踪:

Name: worker-thread-1
State: WAITING on io.netty.channel.DefaultChannelPromise@17ba258
Total blocked: 37  Total waited: 43,574

Stack trace: 
java.lang.Object.wait(Native Method)
java.lang.Object.wait(Object.java:502)
io.netty.util.concurrent.DefaultPromise.await(DefaultPromise.java:231)
io.netty.channel.DefaultChannelPromise.await(DefaultChannelPromise.java:131)
io.netty.channel.DefaultChannelPromise.await(DefaultChannelPromise.java:30)
io.netty.util.concurrent.DefaultPromise.sync(DefaultPromise.java:337)
io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:119)
io.netty.channel.DefaultChannelPromise.sync(DefaultChannelPromise.java:30)
...
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)  
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

为什么我的线程在这里被阻塞?还没有任何连接,只能创建一个Channel并将其注册到事件循环中。

0 个答案:

没有答案