这篇主要讲一下JUC线程池和Tomcat线程池的使用。
简单的讲,
JUC 线程池的工作过程是,优先使用核心线程数,然后填充队列,如果队列填满了,再启用最大线程数。
Tomcat 线程池则是,优先使用核心线程数,然后再使用最大线程数,如果满了,再填充队列。
所以 JUC 线程池适合计算密集型的任务, Tomcat线程池则适合IO密集型的任务。
JUC 线程池
1 2 3 4 5 6 7 8
| threadPoolExecutor = new ThreadPoolExecutor( 4, 32, 1L, TimeUnit.MINUTES, taskQueue, tf, new ThreadPoolExecutor.CallerRunsPolicy());
|
Tomcat 线程池
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| tomcat创建线程池 public void createExecutor() { internalExecutor = true; TaskQueue taskqueue = new TaskQueue(); TaskThreadFactory tf = new TaskThreadFactory(getName() + "-exec-", daemon, getThreadPriority()); executor = new ThreadPoolExecutor(getMinSpareThreads(), getMaxThreads(), 60, TimeUnit.SECONDS,taskqueue, tf); taskqueue.setParent( (ThreadPoolExecutor) executor); }
threadPoolExecutor = new ThreadPoolExecutor( 0, 32, 1L, TimeUnit.MINUTES, taskQueue, tf, new ThreadPoolExecutor.CallerRunsPolicy());
|
参考文章