java创建线程的方式四:使用线程池
线程池相关API
-
JDK 5.0起提供了线程池相关API:ExecutorService和 Executors
- ExecutorService:真正的线程池接口。常见子类ThreadPoolExecutor
- void execute(Runnable command):执行任务/命令,没有返回值,一般用来执行Runnable
- <T> Future<T> submit(Callable<T> task):执行任务,有返回值,一般用来执行Callable
- void shutdown():关闭连接池
- Executors:工具类、线程池的工厂类,用于创建并返回不同类型的线程池
- Executors.newCachedThreadPool():创建一个可根据需要创建新线程的线程池
- Executors.newFixedThreadPool(n);创建一个可重用固定线程数的线程池
- Executors.newSingleThreadExecutor():创建一个只有一个线程的线程池
- Executors.newScheduledThreadPool(n):创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。
没有返回值,一般用来执行Runnable示例:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; class NumberThread implements Runnable { @Override public void run() { // 遍历100以内的偶数 for (int i = 0; i < 100; i++) { if (i % 2 == 0) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } } public class ThreadPool { public static void main(String[] args) { // 1.提供指定线程数量的线程池 ExecutorService service = Executors.newFixedThreadPool(10); // 2.执行指定的线程的操作。需要提供实现Runnable接口的对象 service.execute(new NumberThread());// 适合用于Runnable// 3.关闭连接池 service.shutdown(); } }
有返回值,一般用来执行Callable示例:
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; class NumberThread implements Callable { @Override public Object call() throws Exception { int sum = 0; // 遍历100以内的偶数 for (int i = 0; i < 100; i++) { if (i % 2 == 0) { System.out.println(Thread.currentThread().getName() + ":" + i); sum += i; } } return sum; } } public class ThreadPool { public static void main(String[] args) { // 1.提供指定线程数量的线程池 ExecutorService service = Executors.newFixedThreadPool(10); // 2.执行指定的线程的操作。需要提供实现Callable接口的对象 service.submit(new NumberThread());// 适合用于Callable // 3.需要获取返回结果 Future future = service.submit(new NumberThread()); try { Object sum = future.get(); System.out.println("总和为:" + sum); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } // 4.关闭连接池 service.shutdown(); } }
分类:
java线程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!