Java线程池笔记
程序员文章站
2022-06-01 13:34:17
...
Fork/Join
针对多核cpu时代
线程池
线程池执行顺序
corePoolSize -> 缓冲队列 -> maximumPoolSize -> 拒绝策略
- 使用核心线程池的线程
- 核心线程数满了,任务进入缓冲队列等待
- 缓冲队列满了,任务创建新线程
- 如果最大线程数也满了,执行拒绝策略
手动创建线程池
private static ThreadPoolExecutor threadPool
= new ThreadPoolExecutor(10, 20, 10,
TimeUnit.MINUTES, new LinkedBlockingDeque<>());
线程池工具类创建的四种线程
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
- 最大线程数为Integer.MAX_VALUE可以理解为无限大
- SynchronousQueue是一个内部只能包含一个元素的队列。
- 核心线程数为0,缓冲队列只有一个元素,基本上每进来一个任务就会创建一个线程
- 当任务量特别大时会因为创建的线程太多造成内存溢出
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(10);
- LinkedBlockingQueue 默认界限是Integer.MAX_VALUE可以理解为无限大
- 核心线程数和最大线程数一样
- 当任务量特别大时,会有大量的任务在缓冲队列中等待,造成内存溢出
ExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(10);
1.
ExecutorService singleThreadPool = Executors.newSingleThreadExecutor();
- 相当于核心线程数为1的fixedThreadPool
锁重入
在已经获得锁的同步方法或同步代码块内部 可以调用锁定对象的其他同步方法, 不需要重新获取锁.
下一篇: 网红柠檬泡椒凤爪的制作方法大分享