首页 > 编程语言 >java8多线程使用示例

java8多线程使用示例

时间:2023-06-27 20:34:14浏览次数:58  
标签:示例 list 任务 resultList add CompletableFuture new 多线程 java8

使用CompletableFuture.allOf实现异步执行同步搜集结果

/**
     * @author wjq
     * @create 2022-03-12 16:19
     */
    public class TestCompleteFuture {
    
        private static final int corePoolSize = 10; // 核心线程数
        private static final int maximumPoolSize = 20; // 最大线程数
        private static final long keepAliveTime = 60; // 存活时间
        /**
         * 自定义线程池
         */
        private static final ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime,
                TimeUnit.SECONDS, new ArrayBlockingQueue(100), new ThreadPoolExecutor.CallerRunsPolicy());
    
        /**
         * 使用CompletableFuture完成多任务执行示例
         * @param args
         */
        public static void main(String[] args) {
            List<String> resultList = new ArrayList<>();
            // CompletableFuture list
            List<CompletableFuture<?>> list = new ArrayList<>();
            // 第一个任务
            list.add(CompletableFuture.runAsync(() -> {
                // TODO: 具体的任务执行...
                resultList.add("第一个任务的执行结果");
            }, executor));
            // 第二个任务
            list.add(CompletableFuture.runAsync(() -> {
                // TODO: 具体的任务执行...
                resultList.add("第二个任务的执行结果");
            }, executor));
            // 第三个任务
            list.add(CompletableFuture.runAsync(() -> {
                // TODO: 具体的任务执行...
                resultList.add("第三个任务的执行结果");
            }, executor));
            // 第四个任务
            list.add(CompletableFuture.runAsync(() -> {
                // TODO: 具体的任务执行...
                resultList.add("第四个任务的执行结果");
            }, executor));
            // 待等所有任务执行完成
            CompletableFuture.allOf(list.toArray(new CompletableFuture[0])).join();
            System.out.println(resultList);
        }
    }

 

标签:示例,list,任务,resultList,add,CompletableFuture,new,多线程,java8
From: https://www.cnblogs.com/wjqhuaxia/p/17509865.html

相关文章

  • Spring Boot应用开发初探与示例
    SpringBoot是由Pivotal团队提供的全新Spring开发框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。从它的名字可以看出,SpringBoot的作用在于创建和启动新的基于Spring框架的项目。它的目的是帮助开发人员很容易的创建出独立运行和产品级别的基于Spring框架的应......
  • 【lazada接口系列】获得lazada商品详情API接口采集商品规格信息调用示例
    ​Lazada商品详情API接口的作用是获取Lazada电商平台上的某一商品的详情信息,包括商品的名称、销售价格、库存数量、图片、商品描述、品牌、产地、售后保障等信息。开发者可以使用该API接口获取到商品的原始数据,进行分析、筛选等操作。通过该接口获取到的商品详情数据可以结合其......
  • python实现多进程和多线程
    https://blog.csdn.net/weixin_44917390/article/details/119610760创建多进程方法:importmultiprocessingimporttimedefsing():foriinrange(3):print("iamsingooo~")time.sleep(0.5)defdance():foriinrange(3):......
  • SpringMVC 史上最全最强详细示例实战教程
    一个简单的入门实例教程该实例的源码和实例中的jar源码所需要的jar 另外一篇关于SpringMVC文件上传,多文件上传 简单注解配置的实例: 一、创建项目:1、建立新的动态web项目:2、为项目命名为:SpringMVC_013、添加tomcat运行时环境\依赖库 如果是MyEclipse的话创建web项目时就不需要......
  • c# Thread.Sleep 与 Task.Delay 在多线程中的影响
    一般在函数执行的时候,如果需要让一个任务等待一会儿在执行,大部分都是采用的Thread.Sleep()语句。但如果该函数要复用,同时要给函数一个参数,并让该函数被线程调用后并发执行。当采用如下调用方式的时候,就会出现什么情况呢?就会出现线程阻塞,你会发现只有task1执行,也即只有一个线程......
  • CentOS7+java8+hadoop3.3.5环境搭建
    需要的配置文件centos7的镜像centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云(aliyun.com)java8JavaDownloads|Oraclehadoop3.3.5Indexof/dist/hadoop/common/hadoop-3.3.5(apache.org)步骤首先第一步在本地下载好vmware和centos7的镜像 之后的......
  • 【多线程笔记】如何优雅关闭线程
    在C#中,可以使用CancellationToken来优雅地关闭线程。CancellationToken是一个结构体,用于向线程发送信号以请求线程停止运行。以下是一个使用CancellationToken的示例代码:usingSystem;usingSystem.Threading;publicclassWorker{privateCancellationTokenSource_canc......
  • tqt507 pthread 多线程测试 atomic 原子操作
    ////tqt057测试结果find/opt-name*atomic.h*//aarch64-linux-gnu-gccdemoatomic.c-odemoatomic-pthread-I/opt/EmbedSky/TQT507/CoreA/longan/kernel/linux-4.9/tools/include//cp./demoatomic/home/book/nfs_rootfs#include<linux/atomic.h>#inclu......
  • 分布式锁的实现方式介绍和代码示例
    分布式锁的实现方式介绍分布式锁是一种用于分布式系统中实现互斥访问的机制。在分布式系统中,多个进程或线程可能同时访问共享资源,为了保证数据的一致性和正确性,需要使用分布式锁来实现资源的互斥访问。分布式锁的基本原理是通过在分布式环境下协调各个节点之间......
  • 多进程和多线程以及协程的创建模板
    【一】开启多进程的创建模板(基于Process模块)【1】方式一:创建多进程importmultiprocessingdefworker(n):"""子进程要执行的任务"""print(f'子进程{n}正在执行')defmain():task_lists=[]foriinrange(100)#创建一个进程对象......