Java线程池优化思路

1.根据服务器配置调整线程池参数

根据服务器配置调整核心线程数,最大线程数和阻塞队列的大小。线程池太小会导致任务队列堆积,处理延迟;线程池太大会浪费资源。

2.合理使用任务队列

一般用数组型任务队列ArrayBlockingQueue和链表型队列LinkedBlockingQueue,ArrayBlockingQueue的读锁和写锁公用一把锁,而LinkedBlockingQueue的读锁和写锁是分开的,因此LinkedBlockingQueue效率更高。

3.合理使用拒绝策略

由调用的线程来处理被拒绝的线程:需要考虑是否会占用tomcat的线程数造成影响。适用于处理速率快,提交速率更快的场景。

拒绝但是抛出异常:适用于提交速率低的场景,确保任务不会被丢失。

拒绝不抛出异常:适用于提交效率高但是不重要的任务。

抛弃队列最前面的任务,重新提交被拒绝的任务:适用于处理速率蛮,提交速率快的场景。

4.避免线程的阻塞

当线程池的线程阻塞,会导致线程池效率变低,可以使用非阻塞IO,比如NIO和AIO等。

5.使用工具监控线程池

jconsole:

visualVM;