首页 > 其他分享 >利用阻塞队列完成异步操作

利用阻塞队列完成异步操作

时间:2023-03-08 17:35:03浏览次数:37  
标签:异步 voucherOrder 队列 PostConstruct 阻塞 private 服务器 加载

    //异步阻塞队列变量
    private BlockingQueue<VoucherOrder> orderTasks=new ArrayBlockingQueue<>(1024*1024);
    //create the thread pool signal thread
    private static final ExecutorService SECKILL_ORDER_EXECUTOR=Executors.newSingleThreadExecutor();
    @PostConstruct
    private void init(){
        SECKILL_ORDER_EXECUTOR.submit(new VoucherOrderHandler());
    }
    private class VoucherOrderHandler implements Runnable{

        @Override
        public void run() {
            while(true){
                //get orderinfo from blockingqueen
                try {
                    //获取队列
                    VoucherOrder voucherOrder = orderTasks.take();
                    //crate voucherOrder
                    //执行操作
                    handlerVoucherOrder(voucherOrder);
                } catch (Exception e) {
                    log.error(e.getMessage().toString());
                    //throw new RuntimeException(e);
                }


            }
        }
    }                
public void handlerVoucherOrder(object voucherOrder){
    ...
}

 

@PostConstruct

该注解可以实现在运行工程时,自动运行该注解下的方法;

@PostConstruct是java5的时候引入的注解,指的是在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行,可作为一些数据的常规化加载,比如数据字典之类的。

 

 被@PostConstruct修饰的方法会在服务器加载Servle的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行

也就是加载顺序 

 服务器加载Servlet -> servlet 构造函数的加载 -> postConstruct ->init(init是在service 中的初始化方法. 创建service 时发生的事件.) ->Service->destory->predestory->服务器卸载serlvet

在spring中Constructor、@Autowired、@PostConstruct的顺序
Constructor >> @Autowired >> @PostConstruct

 

标签:异步,voucherOrder,队列,PostConstruct,阻塞,private,服务器,加载
From: https://www.cnblogs.com/hztech/p/17195437.html

相关文章

  • Redxu(RTK) 基础 异步逻辑与数据请求 第5.2.1节 加载帖子第二部分 使用 createAsyncTh
    本篇学习如何正确编写和使用thunk,并且学习通过获取thunk状态在页面上显示不同内容(比如提示正在加载、加载失败、或者是显示加载成功后的数据)的范式。createAsyncThunk请求......
  • mq延时队列
    importcom.example.delayedmsg.config.QueueConfig;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.amqp.rabbit.annotation.R......
  • ⾯试题:如何理解 JS 的异步?
    JS是⼀⻔单线程的语⾔,这是因为它运⾏在浏览器的渲染主线程中,⽽渲染主线程只有⼀个。⽽渲染主线程承担着诸多的⼯作,渲染⻚⾯、执⾏JS都在其中运⾏。如果使⽤同步的⽅式,......
  • 消息队列中间件的选型与比较
    消息队列是一种重要的分布式系统组件,可用于异步通信、削峰填谷、解耦系统、数据缓存等多个方面。在选择消息队列时,需要考虑诸多因素,包括性能、可靠性、可用性、扩展性......
  • 第126篇: 异步函数(async和await)
    好家伙,本篇为《JS高级程序设计》第十章“期约与异步函数”学习笔记 ES8的async/await旨在解决利用异步结构组织代码的问题。为为此增加了两个新关键字:async和awa......
  • 异步编程&&Promise
    进程和线程进程(厂房):程序的运行环境线程(工人):实际进行运算的东西同步通常情况下代码都是自上向下一行一行执行的前面的代码若没执行,后面的也不会执行同步的代码执行......
  • Spring Boot | 事件监听器异步处理事件,实现代码解耦
    一、简介SpringBoot事件监听器(EventListener)用于在应用程序的生命周期中,监听SpringBoot应用程序中各种事件的发生,以便在事件发生时执行某些特定的操作。二、集成步骤1......
  • Redxu(RTK) 基础 异步逻辑与数据请求 第5.2 节 加载帖子
    加载帖子之前我们在postSlice做了硬编码的post作为其初始状态,现在我们改一下,改成从服务器获取帖子数据。提取帖子selectors我们已经在slice中编写过reducer、prepare和t......
  • 【队列】LeetCode 1429. 第一个唯一数字
    题目链接1429.第一个唯一数字给定一系列整数,插入一个队列中,找出队列中第一个唯一整数。实现FirstUnique类:FirstUnique(int[]nums)用数组里的数字初始化队列。in......
  • C# 异步编程(async和await)
    C#异步编程(async和await)在C#中,如果需要I/O绑定(例如从网络请求数据、访问数据库或读取和写入到文件系统),则需要利用异步编程。还可以使用CPU绑定代码(例如执......