首页 > 其他分享 >线程池处理异步任务

线程池处理异步任务

时间:2023-06-27 15:11:18浏览次数:32  
标签:异步 ThreadPoolSingleton private current 任务 线程 executor

点击查看代码
/**
 * 异步任务线程池 (单例)
 * 用于异步执行任务
 */
public class ThreadPoolSingleton {
    private static final AtomicReference<ThreadPoolSingleton> INSTANCE = new AtomicReference<>();
    private final ExecutorService executor;

    private ThreadPoolSingleton() {
        /*
            考虑到异步场景较少,且通常情况下不会同时触发多个异步任务,因此核心线程数直接设一个固定值
            int corePoolSize = Runtime.getRuntime().availableProcessors() * 2
            executor = Executors.newFixedThreadPool(corePoolSize)
        */
        executor = Executors.newFixedThreadPool(2);
    }

    /**
     * CAS(Compare and Swap)算法实现了线程安全的单例模式
     * 如果compareAndSet()的返回值为true,即设置成功,则返回current;否则继续循环,直到获取到线程池单例
     */
    public static ThreadPoolSingleton getInstance() {
        for (; ; ) {
            ThreadPoolSingleton current = INSTANCE.get();
            if (current != null) {
                return current;
            }
            current = new ThreadPoolSingleton();
            if (INSTANCE.compareAndSet(null, current)) {
                return current;
            }
        }
    }

    public void submitTask(Runnable task) {
        executor.submit(task);
    }

}

调用示例

ThreadPoolSingleton.getInstance().submitTask(() -> asynchronousTask());

标签:异步,ThreadPoolSingleton,private,current,任务,线程,executor
From: https://www.cnblogs.com/ashet/p/17508913.html

相关文章

  • springboot 通过SchedulingConfigurer实现多定时任务注册及动态修改执行周期
    Spring中定时任务有两种实现方式:1.@Scheduled(cron表达式)2.基于SchedulingConfigurer注册定时任务这两者的区别主要有1.@Scheduled不支持动态修改定时周期,只能停止服务器,修改cron表达式,再启动服务器;SchedulingConfigurer可以动态修改2.@Scheduled只能是单线程,而SchedulingConfi......
  • Freertos学习06-任务堆栈
    一、前言在FreeRTOS中,每个任务都有自己的堆栈,用于存储任务执行期间使用的局部变量和函数调用。堆栈的大小在任务创建时指定,如果任务使用的堆栈空间超过了指定的大小,就会发生堆栈溢出错误。二、介绍1.堆栈分配xTaskCreate()为任务分配堆栈大小,但是需要注意的是,usStackDept......
  • crontab -l没有定时任务却还有任务在执行
    第一个可能:定时任务设置在了其他账号解决方案:切换到其他账号,切换到root账号下sudo-icrontab-l查看是否有任务列表crontab-e编辑crontab-r删除当前账号下的定时任务第二个可能:定时任务设置在了系统下的crontab列表中解决方案:cat/etc/crontab查看系统级定时任......
  • 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......
  • Java程序CPU消耗分析之找出最耗CPU线程
    java程序CPU消耗过高一般有两种情况:1、us过高,应用占用CPU资源过高,需找出具体占用CPU的线程所执行的代码,分析定位问题原因。分析步骤如下:(1)使用top命令找出占用cpu最高的JAVA进程(2)找出占用cpu最高的线程top-Hp1781(3)占CPU最高线程17596换算成16......
  • jmeter中跨线程调用变量
    Jmeter中跨线程调用变量一.Jmeter中线程运行规则1.各个线程组是完全独立的,每个线程组是不同的业务,互不影响2.线程组中的每个线程也是完全独立3.线程组中的每个线程,都是从上往下执行,完成一轮循环后,继续下一轮循环4.存在业务流或者接口之前存在依赖关系的放同一个线程组5.setup......
  • 分布式任务elasticjob整合springboot本地多服务启动(附源码)
    Elastic-Job是一个分布式调度的解决方案,由当当网开源,它由两个相互独立的子项目Elastic-Job-Lite和ElasticJob-Cloud组成,使用Elastic-Job可以快速实现分布式任务调度。Elastic-Job的github地址:https://github.com/elasticjob功能列表:分布式调度协调在分布式环境中,任务能够按指......
  • 多进程和多线程以及协程的创建模板
    【一】开启多进程的创建模板(基于Process模块)【1】方式一:创建多进程importmultiprocessingdefworker(n):"""子进程要执行的任务"""print(f'子进程{n}正在执行')defmain():task_lists=[]foriinrange(100)#创建一个进程对象......
  • 使用 TranslucentTB ,让任务栏变透明
    一、TranslucentTB TranslucentTB,是一款透明化状态栏软件。你可以在GitHub上找到它,绿色免费开源。 软件作者:sylveon「GitHub」项目地址:http://github.com/TranslucentTB/TranslucentTB 图/引用/TranslucentTB的GitHub项目 此外,TranslucentTB已上架Mic......
  • 强化学习从基础到进阶-常见问题和面试必知必答[6]:演员-评论员算法(advantage actor-cri
    强化学习从基础到进阶-常见问题和面试必知必答[6]:演员-评论员算法(advantageactor-critic,A2C),异步A2C、与生成对抗网络的联系等详解1.核心词汇优势演员-评论员(advantageactor-critic,A2C)算法:一种改进的演员-评论员(actor-critic)算法。异步优势演员-评论员(asynchronousadvanta......