使用线程池异步执行

简介: 使用线程池异步执行

定义AsyncBaseQueue类

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class AsyncBaseQueue {
  private static final int THREAD_SIZE = Runtime.getRuntime().availableProcessors();
  
  private static final int QUEUE_SIZE = 10000;
  
  private static ExecutorService senderAsync =
      new ThreadPoolExecutor(THREAD_SIZE,
          THREAD_SIZE,
          60L,
          TimeUnit.SECONDS,
          new ArrayBlockingQueue<Runnable>(QUEUE_SIZE),
          new ThreadFactory() {
            @Override
            public Thread newThread(Runnable r) {
              Thread t = new Thread(r);
              t.setName("rabbitmq_client_async_sender");
              return t;
            }
          },
          new java.util.concurrent.RejectedExecutionHandler() {
            @Override
            public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
              log.error("async sender is error rejected, runnable: {}, executor: {}", r, executor);
            }
          });
      
    public static void submit(Runnable runnable) {
      senderAsync.submit(runnable);
    } 
      
}

使用方法

private void sendKernel(Message message) {
    // 使用异步线程池进行发送消息
    AsyncBaseQueue.submit(() -> {
      // 具体业务     
    });
  }
目录
相关文章
|
4月前
|
Java 调度
多线程之线程池的七个参数
多线程之线程池的七个参数
76 0
|
18天前
|
Java
JAVA线程&线程池&异步编排
JAVA线程&线程池&异步编排
24 0
|
1月前
|
存储 Java
什么是线程池,线程池的状态,线程池的用法示例
什么是线程池,线程池的状态,线程池的用法示例
|
3月前
|
存储 Java
线程池的执行原理
线程池的执行原理
|
7月前
|
Java 调度
线程池如何知道一个线程的任务已经执行完成
线程池如何知道一个线程的任务已经执行完成
337 0
|
5月前
同步和异步[多线程的异步执行操作]
同步和异步[多线程的异步执行操作]
22 0
|
6月前
3 # 通过回调函数处理异步并发问题
3 # 通过回调函数处理异步并发问题
23 0
|
9月前
|
设计模式 Java 测试技术
异步模式之工作线程
异步模式之工作线程
|
Java
如何让线程池里面的线程按照顺序执行?
笔者今天看到一个有趣的面试题,如何让多个线程按照既定的顺序依次执行?比如每个线程输出一个整数,
519 0
|
存储 缓存 Java
异步和线程池
异步和线程池
异步和线程池