首页 > 其他分享 >如何创建和使用ExecutorService

如何创建和使用ExecutorService

时间:2024-09-15 15:52:01浏览次数:13  
标签:执行 结果 创建 如何 任务 httpPost ExecutorService response

使用 Executors 工厂类来创建不同类型的 ExecutorService。


newFixedThreadPool(int n) 可以创建一个固定大小的线程池。


newCachedThreadPool() 则可以创建一个根据需要自动扩展的线程池。


实际案例:


创建一个简单的多线程程序,使用 ExecutorService 执行一批任务,并获取它们的执行结果。


public static void main(String[] args) {

       // 创建一个固定大小为3的线程池

       ExecutorService executor = Executors.newFixedThreadPool(3);


       // 创建一个列表来保存提交的任务

       List<Future<Integer>> futures = new ArrayList<>();


       // 提交10个任务,每个任务返回任务ID乘以2的结果

       for (int i = 1; i <= 10; i++) {

           final int taskId = i;

           // 提交 Callable 任务,并将 Future 对象保存到列表中

           Future<Integer> future = executor.submit(() -> {

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

               // 模拟任务执行耗时

               Thread.sleep(2000);  

               // 返回任务的结果

               return taskId * 2;  

           });

           // 将 Future 对象添加到列表中

           futures.add(future);  

       }


       // 等待所有任务完成,并打印各任务的执行结果

       for (Future<Integer> future : futures) {

           try {

               // 获取任务执行结果,可能会阻塞直到任务完成

               Integer result = future.get();  

               System.out.println("任务结果: " + result);

           } catch (InterruptedException | ExecutionException e) {

               e.printStackTrace();

           }

       }


       // 关闭线程池

       executor.shutdown();

   }


// 输出结果

任务 1 开始执行

任务 2 开始执行

任务 3 开始执行

任务结果: 2

任务结果: 4

任务 4 开始执行

任务结果: 6

任务 5 开始执行

任务结果: 8

任务 6 开始执行

任务结果: 10

任务 7 开始执行

任务结果: 12

任务 8 开始执行

任务结果: 14

任务 9 开始执行

任务结果: 16

任务 10 开始执行

任务结果: 18

任务结果: 20

    public JSONObject postHttpReq(String json, String url) {
        // 获取http客户端
        CloseableHttpClient httpClient = HttpClientManager.getCloseableHttpClient();
        // 设置超时时间
        RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000).setSocketTimeout(20000).setConnectionRequestTimeout(5000).build();
        // 封装请求参数
        byte[] b = json.getBytes();
        HttpEntity httpEntity = new ByteArrayEntity(b);
        String responseMsg = "";
        int statusCode = 0;
        CloseableHttpResponse response = null;
        try {
            // 创建httpPost请求
            HttpPost httpPost = new HttpPost(url);
            httpPost.setConfig(requestConfig);
            httpPost.setEntity(httpEntity);
            httpPost.setHeader("Content-Type", "application/json;charset=GBK");
            // 执行请求
            response = httpClient.execute(httpPost);
            // 获取请求结果
            statusCode = response.getStatusLine().getStatusCode();
            responseMsg = EntityUtils.toString(response.getEntity());
        } catch (IOException e1) {
            e1.printStackTrace();
        } finally {
            try {
                // 关闭当前请求
                response.close();
            } catch (IOException e2) {
                e2.printStackTrace();
            }
        }
        // 解析请求结果
        if (statusCode != 200) {
            // 输出错误信息
        } else {
            return new JSONObject(responseMsg);
        }
    }


标签:执行,结果,创建,如何,任务,httpPost,ExecutorService,response
From: https://blog.51cto.com/u_16270511/12024485

相关文章

  • 阿里云盘突发“灾难级 Bug”,创建相册之后可以随意观看他人照片
    多名网友在社交媒体上反映,阿里云盘出现了一起令人震惊的隐私安全事件。据用户反馈,在阿里云盘的相册功能中,只要创建一个新的文件夹,竟然能够自动加载并显示其他用户的照片,这些照片内容多样,包括自拍、风景照、家人旅游照片等,引发了广泛关注和讨论。据报道,9月14日晚,多位网友在......
  • Spring 源码解读:使用FactoryBean创建复杂对象的实现
    引言在Spring框架中,FactoryBean是一个特殊的Bean,它允许开发者通过实现FactoryBean接口来控制Bean的创建过程,特别适用于创建复杂对象。FactoryBean可以将复杂对象的创建逻辑与业务逻辑分离,提供更高的灵活性和可扩展性。在本篇文章中,我们将手动实现一个FactoryBean接口,展示......
  • 微信聊天记录删除了如何恢复
    网上很多关于恢复微信聊天记录教程,大部分都是复制粘贴,很多免费的方法,如在微信搜索输入:recovery,或者把聊天记录同步到电脑端等,这些方法只能是修复聊天记录和备份聊天记录,对恢复聊天记录没有任何帮助。还有很多通过手机安装APP来恢复聊天记录的,这些基本上也不可能,根据数据恢复原理......
  • 织梦如何让channelartlist标签支持limit属性
    在织梦CMS(DEDECMS)中,默认情况下channelartlist标签并不支持limit属性。但是,你可以通过修改织梦CMS的核心文件来实现这一功能。以下是详细的步骤:步骤1:备份现有文件在进行任何修改之前,请确保备份相关文件,以防修改失败或出现其他问题。步骤2:修改核心文件定位文件:打......
  • 如何解决MySQL + 字段锁表问题|如何优化MySQL DDL操作以减少锁表时间|深入理解MySQL的On
    在日常的数据库操作中,MySQL数据库的表结构修改是不可避免的操作之一。例如,添加新字段是常见的需求之一。然而,在生产环境中对表结构进行更改时,特别是在大数据量的表中,容易出现锁表问题,导致业务系统的性能下降甚至完全卡顿。MySQL在进行表结构修改时会加表级锁,从而影响到其他的查询和......
  • 结构体类型,结构体变量的创建和初始化
    1.结构体类型的声明结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构体语法规范structtag//结构体名字{member-list;//成员名字}variable-list;//结构体命名的变量使用举例例如描述⼀个学⽣:structStu{charname[20];//名字......
  • LIGGGHTS文件如何在paraview中打开?
            当使用LIGGGHTS进行计算时,会得到.lggghts的文件,而这种文件通常无法在paraview中直接打开。    此时,仅需要找到安装LIGGGHTS的lpp文件中lpp.py文件,便可以将其转化为.vtk格式,方便在paraview中打开。     找到其路径后,利用终端引导至计算案......
  • Cadenza 项目:机器学习如何改善听力受损人士的音乐聆听体验
        音乐,作为全人类共享的文化瑰宝,具有强大的凝聚力,它不仅塑造了我们的社会风貌,更为我们的身心健康带来诸多益处。然而,听力损失却无情地削弱了这份美妙的体验。据世界卫生组织预测,到2050年,全球将有高达25亿人口面临不同程度的听力损失,其中至少7亿人急需治疗。听力受损使......
  • Lua云函数如何设置签名和时间戳校验(按键精灵、懒人精灵等任何语言均可调用)
    Lua云函数工具如何设置签名校验以及时间戳验证前景回顾→Lua云函数的对接和使用http://t.csdnimg.cn/pcIjS添加过[签名校验][时间戳验证][数据加密]任意一项,项目颜色会变成橙色点击[管理项目加密]按钮后会进入下方界面,这次的教程主要讲解如何进行[签名校验......
  • 思维商业篇(1)—如何判断商业效率
    思维商业篇(1)—如何判断商业效率我们评价一个公司,很大程度上其实就是看其商业效率高不高以及规模大不大。规模是一个企业的大小,效率是一个企业的节奏。一个小企业如果效率很高,在未来就会有很多的机会。只要其所在行业在,那么它早晚大鹏一日同风起,扶摇直上九万里。一个企......