一五一十的跟面试官聊线程池

一五一十的跟面试官聊线程池

1、线程池是什么?

2、为什么要使用线程池?使用它之后可以带来什么好处?

3、怎么用?

4、底层原理是如何实现的?

第一个问题:说说你对线程池的理解?

    线程池从字面意思去理解,一个池子里面有一系列的线程,这些线程是事先创建好了的,拿来即用。

    创建线程和销毁线程是不便利的,高并发环境下频繁的创建线程和销毁线程会造成资源的浪费甚至导致系统崩溃,创建和销毁线程是非常消耗资源的‘低效率。而线程池的出现刚好解决了这一问题,省略创建和销毁这一过程,从而最优化使用系统资源。

所以使用线程池作用有两点:1、提前将线程创建好——提高效率;2、提高系统资源利用率——避免系统奔溃;

第二问题:如何创建线程池?

jdk提供4中创建线程池方式:

               第一种:创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务都按照指定顺序执行

                 

                第二种:创建一个定长线程池,可控制线程的最大并发数,超出的线程会在队列中等待.

              

                第三种:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则创建新线程.

                

                第四种:创建一个定长的线程池,支持定时周期性执行任务;  

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }

第三个问题:底层原理是如何实现的?

第四个问题:说说线程池的几个参数?