简单谈谈ThreadPoolExecutor线程池之submit方法
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
"ThreadPoolExecutor线程池之submit方法详解" 在 Java 中,ThreadPoolExecutor 是一个非常重要的线程池实现类,它提供了多种方式来执行任务,其中 submit 方法是其中一个重要的方法,本文将详细解释 ThreadPoolExecutor 的 submit 方法。 我们需要了解 ThreadPoolExecutor 的继承关系。ThreadPoolExecutor 实现了 ExecutorService 接口,而 ExecutorService 接口继承自 Executor 接口。在 Executor 接口中,只定义了 execute 方法,而 submit 方法则是在 ExecutorService 接口中定义的。 ```java public interface ExecutorService extends Executor { ... <T> Future<T> submit(Callable<T> task); <T> Future<T> submit(Runnable task, T result); <T> Future<T> submit(Runnable task); ... } ``` 在 AbstractExecutorService 类中,实现了 submit 方法。 ```java public abstract class AbstractExecutorService implements ExecutorService { ... public <T> Future<T> submit(Callable<T> task) { if (task == null) throw new NullPointerException(); RunnableFuture<T> ftask = newTaskFor(task); execute(ftask); return ftask; } public <T> Future<T> submit(Runnable task, T result) { if (task == null) throw new NullPointerException(); RunnableFuture<T> ftask = newTaskFor(task); execute(ftask); return ftask; } public Future<?> submit(Runnable task) { if (task == null) throw new NullPointerException(); RunnableFuture<Void> ftask = newTaskFor(task, null); execute(ftask); return ftask; } ... } ``` 可以看到,submit 方法实际上是一个模板方法,定义了 submit 方法的算法骨架,其 execute 交给了子类。这也是模板方法模式的一种应用。 submit 方法可以提供线程执行的返回值,但只有实现了 Callable 才会有返回值,而实现 Runnable 的线程则是没有返回值的。也就是说,在上面的三个方法中,submit(Callable<T> task) 能获取到它的返回值,submit(Runnable task, T result) 能通过传入的载体 result 间接获得线程的返回值或者准确来说交给线程处理一下,而最后一个方法 submit(Runnable task) 则是没有返回值的,就算获取它的返回值也是 null。 下面是一个使用 submit 方法的例子: ```java package com.threadpoolexecutor; import java.util.concurrent.*; public class ThreadPoolExecutorSubmitExample { public static void main(String[] args) { ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) Executors.newCachedThreadPool(); // submit(Callable<T> task) Callable<String> callable = new Callable<String>() { @Override public String call() throws Exception { return "Hello, World!"; } }; Future<String> future = threadPoolExecutor.submit(callable); try { String result = future.get(); System.out.println(result); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } // submit(Runnable task, T result) Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello, World!"); } }; Future<String> future2 = threadPoolExecutor.submit(runnable, "Hello, World!"); try { String result = future2.get(); System.out.println(result); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } // submit(Runnable task) Runnable runnable2 = new Runnable() { @Override public void run() { System.out.println("Hello, World!"); } }; Future<?> future3 = threadPoolExecutor.submit(runnable2); try { Object result = future3.get(); System.out.println(result); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } } ``` 在这个例子中,我们创建了一个 ThreadPoolExecutor,使用 submit 方法来执行三个不同的任务。第一个任务是一个 Callable 任务,它返回一个字符串“Hello, World!”;第二个任务是一个 Runnable 任务,它打印输出“Hello, World!”,并返回一个字符串“Hello, World!”;第三个任务也是一个 Runnable 任务,它打印输出“Hello, World!”,但返回值是 null。 ThreadPoolExecutor 的 submit 方法提供了多种方式来执行任务,并且可以获取任务的返回值,这使得我们可以更灵活地使用线程池来执行任务。
























- 粉丝: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- python 练习题,python题目
- 【嵌入式系统】基于STM32单片机的按键控制LED闪烁程序:初学者快速上手指南
- 首个实现全参数训练的知识产权大模型 -MoZi(墨子)
- ADO.NET专业项目实战指南
- 一项基于大模型的App隐私开关探测技术
- 支持多情感男女声,实时离线文本合成 TTS,可单模变声、调速率音量及自定义语音模型
- 首个全参数训练的知识产权大模型 MoZi (墨子)
- 基于 Next.js 的大模型小说创作工具 AI-Novel
- mmexport1755910142185.mp4
- 基于 Next.js 的大模型小说创作工具 AI-Novel
- 【移动应用开发】多框架教程汇总:智慧林业IoT、Rhodes、Kivy、Android、Ionic4开发资源与入门指导
- 冰心3.9多开(推荐).apk
- 唯雨超自然-1.6.apk
- 大数据信息的处理模式与模型构建
- 基于 TinyVue 的前后端分离后台管理系统,支持在线配置菜单、路由、国际化及页签模式、多级菜单,模板丰富、构建工具多样,功能强大且开箱即用!
- CST联合Matlab仿真程序


