如何对比java线程池和netty中的线程组

447 阅读1分钟

大家对于java中的线程池都不会陌生,只要说到线程池我们都会想到与之关联的任务队列、拒绝策略、工作线程数、核心线程数等等这些知识。我们要明确netty中的线程组和java中的线程池是没有关系的,并且设计思想也不相同。

⭐️java线程池的特点 java线程池.png

⭐️Netty线程组的特点 Netty线程组.png

那我们如何才能记住他们之间的差异呢?这里面的差异我们就通过场景来区分就好了🤔。

(1) java线程池的场景主要是任务处理我们都是基于任务提交的方式。在很多时候这些任务那个先执行那个后执行大多数场景是不需要考虑的,那如果任务多了怎么办? 当然是不能无止境的去处理任务一定要有丢弃策略,对于线程呢当然我的任务少就少点工人干活不够再加点就好了。

(2) netty线程组主要是为IO和IO任务设计而生,对于tcp流式协议来说一定是有先有后处理的那这种情况下我就需要把指定的连接分配给指定的线程去处理,这就是面向连接型的线程组特点。对于tcp协议来说好不容易通过ack/sack等特征保证了网络数据的可达而我们再解析协议的时候就要把它丢弃这是不允许的(我这里指的是网络数据流,当然解码完成后变成业务数据是可以做适当拒绝处理)。