赞
踩
Java中的线程池是通过Executor框架实现的,Executor框架位于java.util.concurrent
包下。线程池的核心是ThreadPoolExecutor类,而Executors类提供的工厂方法都是对ThreadPoolExecutor的封装。
ThreadPoolExecutor有几个关键参数:
1. newFixedThreadPool
- public static ExecutorService newFixedThreadPool(int nThreads) {
- return new ThreadPoolExecutor(nThreads, nThreads,
- 0L, TimeUnit.MILLISECONDS,
- new LinkedBlockingQueue<Runnable>());
- }
2. newCachedThreadPool
- public static ExecutorService newCachedThreadPool() {
- return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
- 60L, TimeUnit.SECONDS,
- new SynchronousQueue<Runnable>());
- }
3. newSingleThreadExecutor
- public static ExecutorService newSingleThreadExecutor() {
- return new FinalizableDelegatedExecutorService
- (new ThreadPoolExecutor(1, 1,
- 0L, TimeUnit.MILLISECONDS,
- new LinkedBlockingQueue<Runnable>()));
- }
4. newScheduledThreadPool
- public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
- return new ScheduledThreadPoolExecutor(corePoolSize);
- }
5. newWorkStealingPool (Java 8新增)
newWorkStealingPool
是基于Java 8引入的Fork/Join框架。- public static ExecutorService newWorkStealingPool(int parallelism) {
- return new ForkJoinPool
- (parallelism,
- ForkJoinPool.defaultForkJoinWorkerThreadFactory,
- null, true);
- }
6. newSingleThreadScheduledExecutor
- public static ScheduledExecutorService newSingleThreadScheduledExecutor() {
- return new DelegatedScheduledExecutorService
- (new ScheduledThreadPoolExecutor(1));
- }
在使用线程池时,应该根据具体的应用场景和资源限制选择合适的线程池类型。同时,为了避免资源耗尽和系统崩溃,需要对线程池进行合理配置和监控。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。