Java中ExecutorService需通过Executors工厂方法或手动构建ThreadPoolExecutor创建;常用方式包括newFixedThreadPool(固定线程数、无界队列)、newSingleThreadExecutor(单线程串行)、newCachedThreadPool(弹性线程、SynchronousQueue)和newScheduledThreadPool(定时任务);自Java 9起推荐显式构造ThreadPoolExecutor以控制参数。
Java 中
本身是接口,不能直接 new,必须通过
工具类提供的静态工厂方法创建,或者手动实现(极少用)。常用且推荐的方式是使用
提供的几种标准创建方法,对应不同业务场景。
固定线程数的线程池(newFixedThreadPool)
创建一个可重用、固定数量线程的线程池。所有任务排队等待,线程数恒定,适合负载稳定、资源可控的场景。
底层基于
,核心线程数 = 最大线程数 = 指定值,队列默认是无界
注意:无界队列 + 固定线程可能导致 OOM(如任务提交速度远超执行速度)
示例:
单线程线程池(newSingleThreadExecutor)
内部只维护一个工作线程,所有任务串行执行,保证顺序性和线程安全性,适合需要按提交顺序处理的任务。
本质是
的封装,但返回的是
,禁止调用
等破坏性操作
队列仍是无界,同样要注意堆积风险
示例:
可缓存的线程池(newCachedThreadPool)
适用于大量短生命周期、轻量级
异步任务
的场景。线程数不固定,空闲 60 秒自动回收,需要时新建线程(理论上无上限)。
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
立即学习
“
Java免费学习笔记(深入)
”;
核心线程数为 0,最大线程数为
,使用
(不存储任务,直接移交)
高并发突发任务下可能创建过多线程,导致系统资源耗尽
示例:
定时任务线程池(newScheduledThreadPool)
支持延迟执行和周期性执行任务,是
的实现,比
更健壮(线程安全、异常不中断调度)。
底层也是
扩展,支持
、
、
注意:它不是普通
的子集,而是扩展接口,但可向上转型使用
示例:
重要提醒:自 Java 9 起,官方文档明确建议:优先使用显式构造,避免用工厂方法。因为它们隐藏了关键参数(如队列容量、拒绝策略、线程工厂),容易引发线上问题。生产环境更推荐手动构建,例如:
基本上就这些主流创建方式。用对方法的前提是理解背后线程池的参数逻辑,而不是只记名字。
ExecutorServiceExecutorsExecutorsThreadPoolExecutorLinkedBlockingQueueExecutorService pool = Executors.newFixedThreadPool(4);newFixedThreadPool(1)FinalizableDelegatedExecutorServiceshutdownNow()ExecutorService pool = Executors.newSingleThreadExecutor();Integer.MAX_VALUESynchronousQueueExecutorService pool = Executors.newCachedThreadPool();ScheduledExecutorServiceTimerThreadPoolExecutorschedulescheduleAtFixedRatescheduleWithFixedDelayExecutorServiceScheduledExecutorService scheduler = Executors.newScheduledThreadPool(2);ThreadPoolExecutorExecutorsnew ThreadPoolExecutor(4, 8, 60L, TimeUnit.SECONDS, new ArrayBlockingQueue(100), new CustomThreadFactory(), new ThreadPoolExecutor.CallerRunsPolicy());