在Java中基于Executors提供了很多种线程池供开发者使用,在Java的并发包下,由并发编程大佬到隔离创建。
newFixedThreadPool
这个线程池的特点是线程数是固定的,下面这个是在Executors类中提供的一种静态方法。在使用的时候需要向方法提供一个nThreads参数,用于固定该线程池中的线程个数。在方法中可以看到本质上也是使用ThreadPoolExecutor来创建。
- 需要注意的是线程数虽然是随着你传入的nThreads参数个数是固定了,但是线程是懒加载,在构建之初线程并没有创建,而是随着开发者调用提交的任务使用之后线程才在线程池中创建出来。***
- 如果要是线程没有被创建,那么会等待任务的执行而线程被创建和执行。
- 要是线程已经被创建好了之后,那任务会放到参数中显示的LinkedBlockingQueue无界队列中存放着。等待线程自己去队列中take获取任务执行。
执行的效果演示
- 可以看到我在创建的时候只创建2个线程,因此在执行的时候也就只有两个线程在执行我所分配的任务。
代码效果演示
- 添加了系统的时间戳查看不难发现,要是没有线程可以使用就会进队列等待,然后等到线程可以使用再获取执行任务。