文章目录
-
- 1.线程池有几种实现方式?
- 2.线程池的参数含义?
- 3.锁升级的过程?
- 4.i++ 如何保证线程安全?
- 5.HashMap和ConcurrentHashMap有什么区别?
- 6.@Autowired和@Resource区别?
- 7.说说常用的设计模式
- 8.Redis为什么这么快?
- 9.索引的种类?如何优化?
1.线程池有几种实现方式?
线程池的创建方法总共有 7 种,但总体来说可分为 2 类:通过 ThreadPoolExecutor 创建的线程池;通过 Executors 创建的线程池。
线程池的创建方式总共包含以下 7 种(其中 6 种是通过 Executors 创建的,1 种是通过 ThreadPoolExecutor 创建的):
- Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制并发的线程数,超出的线程会在队列中等待;
- Executors.newCachedThreadPool:创建一个可缓存的线程池,若线程数超过处理所需,缓存一段时间后会回收,若线程数不够,则新建线程;
- Executors.newSingleThreadExecutor:创建单个线程数的线程池,它可以保证先进先出的执行顺序;
- Executors.newScheduledThreadPool:创建一个可以执行延迟任务的线程池;
- Executors.newSingleThreadScheduledExecutor:创建一个单线程的可以执行延迟任务的线程池;
- Executors.newWorkStealingPool:创建一个抢占式执行的线程池(任务执行顺序不确定)【JDK 1.8 添加】。
- ThreadPoolExecutor:最原始的创建线程池的方式,它包含了 7 个参数可供设置,会更加可控。
2.线程池的参数含义?
问到线程池参数的含义,一定是问 ThreadPoolExecutor 参数的含义,这七个参数的含义分别是: 7 个参数代表的含义如下:
-
corePoolSize核心线程数,线程池中始终存活的线程数。
-
参数 2:maximumPoolSize最大线程数,线程池中允许的最大线程数,当线程池的任务队列满了之后可以创建的最大线程数。
-
参数 3:keepAliveTime最大线程数可以存活的时间,当线程中没有任务执行时,最大线程就会销毁一部分,最终保持核心线程数量的线程。
-
参数 4:unit:单位是和参数 3 存活时间配合使