线程池ThreadPoolExecutor配合callable获得线程执行结果
此处记录使用callable创建线程,使用线程池执行,看下是否有进行线程复用并且FutureTask返回结果
线程创建
public class MyCallableBakeUser implements Callable<String> { private int a ; public MyCallableBakeUser(int a){ this.a = a; } @Override public String call() throws Exception { int sum = 0; for (int i = 0; i < a; i++) { sum += i; } return Thread.currentThread().getName() + " 线程求和:" + sum; } }
使用main测试
public class ThreadCallPool { public static void main(String[] args) throws ExecutionException, InterruptedException { ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(3,5,8, TimeUnit.SECONDS,new ArrayBlockingQueue<>(4), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy()); Future<String> future = poolExecutor.submit(new MyCallableBakeUser(10)); Future<String> future1 = poolExecutor.submit(new MyCallableBakeUser(20)); Future<String> future2 = poolExecutor.submit(new MyCallableBakeUser(30)); Future<String> future3 = poolExecutor.submit(new MyCallableBakeUser(40)); System.out.println(future.get()); System.out.println(future1.get()); System.out.println(future2.get()); System.out.println(future3.get()); } }
控制台打印:
pool-1-thread-1 线程求和:45 pool-1-thread-2 线程求和:190 pool-1-thread-3 线程求和:435 pool-1-thread-1 线程求和:780
核心线程数为3个,说明线程得到复用,同时也得到callable的返回值
以上内容纯属学习!
分类:
多线程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)