• springboot 多线程的使用


     1 int pageSize = 10000;
     2         int totalCount = doctorDAO.selectDatasByMapCount2(jsonArray, false, null);
     3         int m = totalCount % pageSize;
     4         int pageCount = m == 0 ? (totalCount / pageSize) : (totalCount / pageSize + 1);
     5 
     6         List<DoctorDO> resultList = new ArrayList<>();
     7         BlockingQueue<Future<List<DoctorDO>>> queue = new LinkedBlockingQueue<>();
     8 
     9         for (int i = 0; i < pageCount; i++) {
    10             Thread.sleep(0);
    11             Future<List<DoctorDO>> future;
    12             future = queryDatas(jsonArray, i * pageSize, pageSize);
    13             queue.add(future);
    14         }
    15 
    16         int queueSize = queue.size();
    17         logger.debug("queue size:" + queueSize);
    18         for (int i = 0; i < queueSize; i++) {
    19             List<DoctorDO> subAttendList = queue.take().get();
    20             if (!CollectionUtils.isEmpty(subAttendList)) {
    21                 resultList.addAll(subAttendList);
    22             }
    23         }
    1     @Async
    2     public Future<List<DoctorDO>> queryDatas(JSONArray jsonArray, int start, int size) {
    3         List<DoctorDO> subAttendList = doctorDAO.selectDatasByMap2(start, size, jsonArray, true, null);
    4         logger.info("完成任务");
    5         return new AsyncResult<>(subAttendList);
    6     }
     1 import org.slf4j.Logger;
     2 import org.slf4j.LoggerFactory;
     3 import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
     4 import org.springframework.context.annotation.Configuration;
     5 import org.springframework.scheduling.annotation.AsyncConfigurer;
     6 import org.springframework.scheduling.annotation.EnableAsync;
     7 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
     8 
     9 import java.lang.reflect.Method;
    10 import java.util.concurrent.Executor;
    11 
    12 
    13 /**
    14  * 多线程配置类
    15  */
    16 @Configuration
    17 @EnableAsync
    18 public class ThreadConfig implements AsyncConfigurer {
    19     private static Logger logger = LoggerFactory.getLogger(ThreadConfig.class);
    20 
    21     /**
    22      * The {@link Executor} instance to be used when processing async
    23      * method invocations.
    24      */
    25     @Override
    26     public Executor getAsyncExecutor() {
    27         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    28         executor.setCorePoolSize(15);
    29         executor.setMaxPoolSize(25);
    30         executor.setQueueCapacity(25);
    31         executor.initialize();
    32         return executor;
    33     }
    34 
    35     /**
    36      * The {@link AsyncUncaughtExceptionHandler} instance to be used
    37      * when an exception is thrown during an asynchronous method execution
    38      * with {@code void} return type.
    39      */
    40     @Override
    41     public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
    42         return new SpringAsyncExceptionHandler();
    43     }
    44 
    45     class SpringAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
    46         @Override
    47         public void handleUncaughtException(Throwable throwable, Method method, Object... obj) {
    48             throwable.printStackTrace();
    49         }
    50     }
    51 
    52     public static void main(String[] args) {
    53         logger.info("123");
    54         logger.info("123");
    55         logger.info("123");
    56     }
    57 }
  • 相关阅读:
    ndk的注意事项
    git
    centos 7 linux x64
    linuxGame:文明5汉化
    pycharm something
    linux soft
    jsfl脚本设置导出AS链接名遇到的奇怪问题
    jsfl调整笔刷的笔触和颜色
    [转]FINDSTR正则表达式小结
    [转]关于SVN的操作批处理示例
  • 原文地址:https://www.cnblogs.com/yangxiaobo-blog/p/11539637.html
Copyright © 2020-2023  润新知