首页 > 其他分享 >常用的多线程类

常用的多线程类

时间:2022-10-18 14:46:22浏览次数:84  
标签:常用 get System submit CompletableFuture executor println 多线程

常用的多线程类

创建池

 ExecutorService executor = Executors.newFixedThreadPool(4);

Executors工程类,可以提交任务。executor.submit(Callable task)

记得关闭池shutdown。

springboot对上述操作已经进行了封装

Spring Boot 中的线程池,这也太好用了! - 腾讯云开发者社区-腾讯云 (tencent.com)

有返回值的异步操作Callable


 //Executors创建的队列容量允许的太多,将会导致oom,所以采用ThreadPoolTaskExecutor、或ThreadPoolExecutor 进行队列容量限制
//        ExecutorService executor = Executors.newFixedThreadPool(4);
//        ExecutorService executor = new ThreadPoolExecutor(10, 10,60L, TimeUnit.SECONDS, new ArrayBlockingQueue(10));
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(2);
        executor.setMaxPoolSize(2);
        executor.setKeepAliveSeconds(60);
        executor.setQueueCapacity(40);
        executor.initialize();
        Future<Integer> submit = executor.submit(() -> {
            Thread.sleep((int) 0 + (int) (Math.random() * 2));
            System.out.println(1);
            return 1;
        });
        Future<Integer> submit1 = executor.submit(() -> {
            Thread.sleep((int) 0 + (int) (Math.random() * 2));
            System.out.println(2);
            return 2;
        });
        /*
        // submit.get();
        // submit1.get(); 都不进行get数据就是不确定的顺序异步的。
         */
        /*
        submit.get();
        // submit1.get(); 进行submit数据.get,2,3
         */

        System.out.println(3);
        executor.shutdown();

同时计算成功即返回数据CompletableFuture

//每个线程做的事情
        CompletableFuture<String> C1 = CompletableFuture.supplyAsync(() -> {
            return queryCourse("1", "2");
        });
        CompletableFuture<String> C2 = CompletableFuture.supplyAsync(() -> {
            return queryCourse("2", "3");
        });
        //监听多个线程有一个成功,不阻塞,没返回也向下执行.
        CompletableFuture<Object> voidCompletableFuture = CompletableFuture.anyOf(C1, C2);


        voidCompletableFuture.thenAccept(res -> {
            System.out.println(res);
        });

(82条消息) SpringBoot 使用 CompletableFuture 实现非阻塞异步编程_流放深圳的博客-CSDN博客_springboot异步非阻塞

spring 封装的ListenableFuture 对象

executor.submitListenable()线程池中添加任务。通过调用addCallback方法可以写回调函数完成对正确与异常的数据进行处理。

setMaxPoolSize(2);
        e.setKeepAliveSeconds(60);
        e.setQueueCapacity(Integer.MAX_VALUE);
        e.initialize();
        e.submitListenable(() -> {

            // 休息 5 秒,模拟工作的情况
            TimeUnit.SECONDS.sleep(5);
            // 通过抛出 RuntimeException 异常来模拟异常
//            throw new RuntimeException("出现异常");
            return 1;

        }).addCallback(data -> System.out.println("success,result = " + data), ex -> System.out.println("**异常信息**:" + ex));
        e.shutdown();

标签:常用,get,System,submit,CompletableFuture,executor,println,多线程
From: https://www.cnblogs.com/bullbat/p/16802483.html

相关文章

  • 常用快捷键
    哈喽!大家好,第一次加入博客园,刚开始学习计算机,分享一些自己学到的东西。(这些快捷键不用特意去记忆,使用的多了慢慢就记住了。哈哈哈哈!!)1.CTRL+C复制2.CTRL+V粘贴3.CTRL+A全......
  • OpenCV技巧 | 常用格式图片保存为透明背景图片(附Python源码)-教你轻松制作Logo
    导读本文主要介绍使用OpenCV将常用格式图片保存为透明背景图片的方法与实现代码。实现目标本文的目标有如下两个:①将常见格式[jpg/png/bmp]白色背景图片转换保存为透明背......
  • Git 常用命令清单
    每天使用Git,但是很多命令记不住。一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。下面是整理的常用Git命令清单。几个专用名词......
  • OpenCV常用图像拼接方法(一) :直接拼接
      OpenCV常用图像拼接方法将分为四部分与大家分享,这里是第一种方法,欢迎关注后续。  OpenCV常用图像拼接方法(一):直接拼接,俗称硬拼,就是简单的将两张图片合并成一张......
  • OpenCV常用图像拼接方法(二) :基于模板匹配拼接
      OpenCV常用图像拼接方法将分为四部分与大家分享,这里是第二种方法,欢迎关注后续,本文源码与素材链接位于文章末尾。  OpenCV常用图像拼接方法(二):基于模板匹配的图......
  • Stream流中的常用方法concat
    如果有两个流,希望合并成为一个流,那么可以使用stream接口的静态方法concat:static<T>Stream<T>concat(Stream<?extendsT>a,Stream<?extendsT>b);/***......
  • 【Java】多线程详解!
    多线程程序程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程进程(process)是程序的一次执行过程,或是正在运行的一个......
  • Python中的多线程
    线程和进程线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线进程之间相互独立,但同一线程......
  • Stream流中的常用方法map和count
    如果需要将流中的元素映射到另一个流中,可以使用map方法。方法签名∶<R>Stream<R>map(Function<?superT,?extendsR>mapper);该接口需要一个Function函数......
  • Python常用库
    一、python爬虫常用库Python在编写网络爬虫常用到库主要包括urllib、requests、lxml、fake-useragent、bs4(BeautifulSoup)、grab、pycurl、urllib3、httplib2、RoboBrow......