大家好,欢迎来到IT知识分享网。
目录
3.newSingleThreadExecutor(一池一线程)
4.newScheduledThreadPool(任务线程池)
一、线程池是什么?
线程池是一个用于管理和优化线程使用的设计模式,特别是在执行大量任务或处理并发请求时。它通过维护一定数量的可重用线程来提升应用程序的性能。它有2种类创建方式:
二、Executors创建
Executors创建常见有4种类型:
Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制并发的线程数,超出的线程会在队列中等待。
Executors.newCachedThreadPool:创建一个可缓存的线程池,若线程数超过处理所需,缓存一段时间后会回收,若线程数不够,则新建线程。
Executors.newSingleThreadExecutor:创建单个线程数的线程池,它可以保证先进先出的执行顺序。
Executors.newScheduledThreadPool:创建一个可以执行延迟任务的线程池。
1.FixedThreadPool(一池多线程)
创建一个固定线程数的线池,初始容量为5的线程池
代码如下(示例):
public class fixThread { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(5);//设置线程初始容量为5 for (int i = 0; i < 10; i++) { executorService.execute(() -> { System.out.println(Thread.currentThread().getName() + "正在执行中"); }); } } }
2.newCachedThreadPool(可缓存线程池)
创建一个可缓存线程池,它的特点是根据需求创线程数,不需要指定数量
代码如下(示例):
//可缓存线程池 public class CacheThread { public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); for (int i = 0; i <10 ; i++) { executorService.execute(()->{ System.out.println(Thread.currentThread().getName()+"正在执行中"); }); } } }
3.newSingleThreadExecutor(一池一线程)
创建一个线程的线程池,不需要指定数量
public class fixThread { public static void main(String[] args) { ExecutorService executorService = Executors.newSingleThreadExecutor(); for (int i = 0; i <10 ; i++) { executorService.execute(()->{ System.out.println(Thread.currentThread().getName()+"正在执行中"); }); } } }
4.newScheduledThreadPool(任务线程池)
public class fixThread { public static void main(String[] args) { ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5); for (int i = 0; i <10 ; i++) { scheduledExecutorService.schedule(()->{ System.out.println(Thread.currentThread().getName()+"正在执行延迟任务"); },5, TimeUnit.SECONDS); } }
三、自定义线程池ThreadPoolExecutor
七大参数:
7,defaultHandler 拒绝策略 任务超过线程可以处理的任务时候,采取的处理方式
public class fixThread { public static void main(String[] args) { ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(5,10,5,TimeUnit.SECONDS,new ArrayBlockingQueue<>(5,true),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy()); for (int i = 0; i <12 ; i++) { threadPoolExecutor.execute(()->{ System.out.println(Thread.currentThread().getName()+"执行中"); }); } } }
ThreadPoolExecutor 相比于其他创建线程池的优势在于,它可以通过参数来控制最大任务数和拒绝策略,让线程池的执行更加透明和可控,所以在阿里巴巴《Java开发手册》是这样规定的:
【强制要求】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
总结
线程池的常见创建方式有以下 5 种:
Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制并发的线程数,超出的线程会在队列中等待。
Executors.newCachedThreadPool:创建一个可缓存的线程池,若线程数超过处理所需,缓存一段时间后会回收,若线程数不够,则新建线程。
Executors.newSingleThreadExecutor:创建单个线程数的线程池,它可以保证先进先出的执行顺序。
Executors.newScheduledThreadPool:创建一个可以执行延迟任务的线程池。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112379.html