基本上Netty的server:
ChannelFuture channelFuture = (port).syncUninterruptibly();//绑定端口,开启监听
后面都会加上这句
().closeFuture().syncUninterruptibly();
那这行代码到底有什么作用呢?具体没有深入源码,只随笔记录一下心得:
作用:Netty server启动:绑定端口,开启监听是通过异步开启一个子线程执行的,当前线程不会同步等待;closeFuture().syncUninterruptibly()就是让当前线程(即主线程)同步等待Netty server的close事件,Netty server的channel close后,主线程才会继续往下执行。closeFuture()在channel close的时候会通知当前线程。
服务端管道关闭的监听器并同步阻塞,直到server channel关闭,线程才会往下执行,结束进程;
主线程执行到这里就 wait 子线程结束,子线程才是真正监听和接受请求的,子线程就是Netty启动的监听端口的线程;
即closeFuture()是开启了一个子线程server channel的监听器,负责监听channel是否关闭的状态,syncUninterruptibly()让主线程同步等待子线程结果。
补充:.()才是主动关闭通道的方法。