我的应用程序运行一段时间后,我的线程在等待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并将其注册到事件循环中。