什么情况下需要创建多个线程池 线程池的几种方式

导读 今天来聊聊关于什么情况下需要创建多个线程池,线程池的几种方式的文章,现在就为大家来简单介绍下什么情况下需要创建多个线程池,线程池的

今天来聊聊关于什么情况下需要创建多个线程池,线程池的几种方式的文章,现在就为大家来简单介绍下什么情况下需要创建多个线程池,线程池的几种方式,希望对各位小伙伴们有所帮助。

1、首先说明下java线程是如何实现线程重用的1. 线程执行完一个Runnable的run()方法后,不会被杀死 2. 当线程被重用时,这个线程会进入新Runnable对象的run()方法12java线程池由Executors提供的几种静态方法创建线程池。

2、下面通过代码片段简单介绍下线程池的几种实现方式。

3、后续会针对每个实现方式做详细的说明newFixedThreadPool创建一个固定大小的线程池 添加的任务达到线程池的容量之后开始加入任务队列开始线程重用总共开启线程个数跟指定容量相同。

4、@Testpublic void newFixedThreadPool() throws Exception {ExecutorService executorService = Executors.newFixedThreadPool(1);executorService = Executors.newFixedThreadPool(1, new ThreadFactoryBuilder().build());RunThread run1 = new RunThread("run 1");executorService.execute(run1);executorService.shutdown();}12345678newSingleThreadExecutor仅支持单线程顺序处理任务@Testpublic void newSingleThreadExecutor() throws Exception {ExecutorService executorService = Executors.newSingleThreadExecutor();executorService = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().build());executorService.execute(new RunThread("run 1"));executorService.execute(new RunThread("run 2"));executorService.shutdown();}123456789newCachedThreadPool这种情况跟第一种的方式类似,不同的是这种情况线程池容量上线是Integer.MAX_VALUE 并且线程池开启缓存60s@Testpublic void newCachedThreadPool() throws Exception {ExecutorService executorService = Executors.newCachedThreadPool();executorService = Executors.newCachedThreadPool(new ThreadFactoryBuilder().build());executorService.execute(new RunThread("run 1"));executorService.execute(new RunThread("run 2"));executorService.shutdown();}123456789newWorkStealingPool支持给定的并行级别,并且可以使用多个队列来减少争用。

5、@Testpublic void newWorkStealingPool() throws Exception {ExecutorService executorService = Executors.newWorkStealingPool();executorService = Executors.newWorkStealingPool(1);RunThread run1 = new RunThread("run 1");executorService.execute(run1);executorService.shutdown();}123456789newScheduledThreadPool看到的现象和第一种相同,也是在线程池满之前是新建线程,然后开始进入任务队列,进行线程重用 支持定时周期执行任务(还没有看完)@Testpublic void newScheduledThreadPool() throws Exception {ExecutorService executorService = Executors.newScheduledThreadPool(1);executorService = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder().build());executorService.execute(new RunThread("run 1"));executorService.execute(new RunThread("run 2"));executorService.shutdown();}。

相信通过线程池的几种方式这篇文章能帮到你,在和好朋友分享的时候,也欢迎感兴趣小伙伴们一起来探讨。

标签:

免责声明:本文由用户上传,如有侵权请联系删除!