背景
-
对于Netty的使用,都会使用bossGroup和workerGroup的方式,而常说的bossGroup和workerGroup其实是NioEventLoopGroup的实例。
-
在Netty中,EventLoopGroup和NioEventLoopGroup其实就是一个线程池。
EventLoopGroup和NioEventLoopGroup的继承体系
-
Netty中的EventLoopGroup接口直接继承JDK中的EventExecutorGroup接口。
-
Netty中的NioEventLoopGroup是继承了MultithreadEventLoopGroup抽象类,而MultithreadEventLoopGroup继承MultithreadEventExecutorGroup抽象类。MultithreadEventExecutorGroup抽象类实现了Netty中的EventLoopGroup接口。由此,就可以明白Netty中的类是怎样跟JDK的并发包下面的类关联上关系的。
JDK的Executor的简单用法
public class DemoTask implements Runnable {
@Override
public void run() {
System.out.println("Demo task will run here.");
}
static class Worker {
ExecutorService executorService = Executors.newSingleThreadExecutor();
public Future execute(Runnable runnable) {
return executorService.submit(runnable);
}
}
public static void main(String[] args) {
Worker worker = new Worker();
worker.execute(new DemoTask());
worker.execute(() -> {
System.out.println("----------This is an lambda work------");
DemoTask dt = new DemoTask();
dt.run();
});
}
}
-
JDK中是推荐使用Runnable实现多线程逻辑,而这个Runnable实现多线程逻辑,最好是配合Executor来实现。
-
Executor可以把业务逻辑和线程本身管理给分离开来。也就是说,线程本身的管理工作交给Executor来进行,而线程本身只需要关心它自己的任务(业务逻辑过程)。
小结
-
Netty中一个核心接口EventLoopGroup是怎么跟JDK并发包下面类进行关联上关系的。
-
Netty中一个核心类NioEventLoopGroup是怎么跟JDK并发包下面类进行关联上关系的。
-
Executor是线程池管理类,它把线程本身和线程需要执行的任务隔离开来。