小工具      在线工具  汉语词典  css  js  c++  java

ThreadPoolExecutor execute和submit

Java 额外说明

收录于:97天前

多线程还有一个有趣的地方就是,向线程池提交线程时其实有两种方法:一种是execute,一种是submit

1.执行提交方法

execute提交方法只能提交一个Runnable对象,并且该方法的返回值为void,即提交后如果线程运行,则会与主线程断开连接。当然,你可以设置一些变量来获取线程的运行结果。并且当线程执行过程中抛出异常时,通常主线程无法获取异常信息。只有通过ThreadFactory主动设置线程的异常处理类,才能感知到提交的线程中的异常信息。

2. 如何提交

提交方式有以下三种:

1. <T> Future<T> 提交(Callable<T> 任务);

这种提交方式是提交一个实现Callable接口的对象。 Callable接口的定义如下

public interface Callable<V> {
    /**
     * Computes a result, or throws an exception if unable to do so.
     *
     * @return computed result
     * @throws Exception if unable to compute a result
     */
    V call() throws Exception;
}

可以看到Callable接口和Runnable接口的定义非常相似,只不过Runnable接口有一个没有返回值的run方法,而Callable接口有一个有返回值的call方法。

该提交方法将返回一个 Future 对象。这个Future对象代表了这个线程的执行结果。 (前段时间去阿里巴巴面试,被问到Future是什么,现在想来,这个问题我本来是解释过的,并不是面试官不太满意。)

当主线程调用Future的get方法时,会获取线程返回的结果数据。

如果线程执行过程中发生异常,get将获取异常信息。

2. Future<?> 提交(可运行任务);

还可以提交一个Runable接口的对象,这样在调用get方法时,如果线程执行成功则直接返回null,如果线程执行异常则返回异常信息。

3. <T> Future<T> 提交(可运行任务,T 结果);

这个界面比较有趣。除了任务之外,还有一个结果对象。

当线程正常结束的时候调用Future的get方法会返回result对象,当线程抛出异常的时候会获取到对应的异常的信息。
 


// 1. 初始化线程池方法一
private static final ExecutorService es = new ThreadPoolExecutor(8, 10, 100, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(100));


    public static void main(String[] args) {

// 2. 初始化线程池方法二
        ExecutorService executorService = Executors.newFixedThreadPool(3);

        System.out.println("------------------任务开始执行---------------------");

        Future<String> future = es.submit(new Callable<String>() {
            @Override
            public String call() throws Exception {
                Thread.sleep(5000);
                System.out.println("submit方法执行任务完成" + "   thread name: " + Thread.currentThread().getName());
                return SUCCESS;
            }
        });

        try {
            // submit()返回FutureTask对象,通过这个FutureTask对象调用get()可以返回submit()方法传入的一个泛型类参数result对象,如果是Callable直接通过call()返回。这个返回值的可以用来校验任务执行是否成功。
            String s = future.get(); 
            if (SUCCESS.equals(s)) {
                String name = Thread.currentThread().getName();
                System.out.println("经过返回值比较,submit方法执行任务成功    thread name: " + name);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("-------------------main thread end---------------------");
    }

. . .

相关推荐

额外说明

多模态对比语言图像预训练CLIP:打破语言与视觉的界限

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用 CSDN 平台,自主完成项目设计升级,提升自

额外说明

渗透工具-白帽安全工程师Kali linux系统

渗透工具-白帽安全工程师Kali linux ubuntu 20.04 安装metasploit msfvenom常用生成 Payload 命令 2022 安装 Armitage 傻瓜渗透msf 介绍 官网下载 build安装 配置数据库 扫描内网主机

额外说明

Python常用模块 hashlib,pymysql,logging和datetime模块习题检测

目录: 每篇前言: 1.hashlib模块 将图片通过hashlib加密。 2.pymysql模块 往mysql数据表插入一万条数据,表结构自拟。 3.logging模块 请配置logging模块,使其在控制台和文件里同时打印格式为`时间:2022-11

额外说明

《微服务实战》 第二十五章 Java多线程安全与锁

系列文章目录 第二十八章 分布式锁框架-Redisson 第二十七章 CAS 第二十六章 Java锁的分类 第二十五章 Java多线程安全与锁 第二章 CountDownLatch和Semaphone的应用 第一章 Java线程池技术应用 文章目录 系列

额外说明

新华三培训3---交换基础,VLAN之间路由

交换基础,VLAN之间路由 网线的线序: 1 2 3 4 5 6 7 8 橙白 橙 绿白 蓝 蓝白 绿 棕白 棕 (568B的标准) 绿白 绿 橙白 蓝 蓝色 橙 棕白 粽 (586A的标准) 为什么只有1-3,2-6对调,其中4578都没有对调呢? 4

额外说明

距离度量 —— 余弦相似度(Cosine similarity)

Python学习系列文章:- 目录 - 文章目录 一、概述 二、计算公式 ① 二维平面上的余弦相似度 ② n维空间上的余弦相似度 ③ 注意 一、概述 三角函数,相信大家在初高中都已经学过,而这里所说的余弦相似度(Cosine Distance)的计算公式

额外说明

[Ext JS6] ViewControllers-视图控制器

文章目录 应用层级控制器 - Application-level Controllers 视图控制器 - ViewControllers 监听器 listeners 引用 - Reference 监听和事件域知识 Ext JS 加入了ViewModels

额外说明

计算机网络知识总结

五、传输层。 网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。 UDP 和 TCP 的特

额外说明

Java学习笔记5.3.2 Set接口 - TreeSet类

文章目录 零、本讲学习目标 一、TreeSet类 (一)TreeSet类概述 (二)TreeSet类API文档 (三)TreeSet类结构图 (四)TreeSet对象存储原理 1、结构说明 2、存储原理 3、存储过程 (1)添加元素 (2)存储过程 4、

额外说明

解决API-MS-Win-Core-Kernel32-Private-L1-1-0.dll文件丢失找不到的问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个API-MS-Win-Core-Kernel32-Privat

ads via 小工具