多线程批量处理 list数据;

mac2024-06-04  37

1: 创建线程池

private static final ExecutorService EXECUTOR_POOL = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(BLOCKING_QUEUE_SIZE), new BasicThreadFactory.Builder().namingPattern(MULTI_THREAD_NAMING_PATTERN).daemon(true).build(), new ThreadPoolExecutor.AbortPolicy());

2:创建异步多线程处理逻辑

public class IvrAppointmentThread implements Runnable { private Logger logger = LoggerFactory.getLogger(IvrAppointmentThread.class); private IvrAnnouncementService ivrAnnouncementService; public IvrAppointmentThread(IvrAnnouncementService ivrAnnouncementService, IvrAnnouncement ivrAnnouncement){ this.ivrAnnouncementService= ivrAnnouncementService; this.ivrAnnouncement = ivrAnnouncement; } @Override public void run() { try { logger.info(Thread.currentThread().getName()+" Start.============================="); ivrAnnouncementService.createIvrAnnouncement(ivrAnnouncement); logger.info(Thread.currentThread().getName()+" End.================================"); }catch (Exception e){ logger.error(Thread.currentThread().getName()+" Error."+e); } } }

3:异步调用执行

List listAvage =averageAssign(listResult,CORE_POOL_SIZE); for (Object list :listAvage){ IvrCreateAnnouncementThread ivrCreateAnnouncementThread = new IvrCreateAnnouncementThread((List<Map<String, String>>) list, fileId,relationUidFileIdUidMapper,ivrAnnouncementService); EXECUTOR_POOL.execute(ivrCreateAnnouncementThread); }

4: 销毁线程

@PreDestroy private void cleanup() { if (!EXECUTOR_POOL.isShutdown()) { EXECUTOR_POOL.shutdown(); } }

5:辅助工具

/** * 将一个list均分成n个list,主要通过偏移量来实现的 * @param source * @return */ public static <T> List<List<T>> averageAssign(List<T> source,int n){ List<List<T>> result=new LinkedList<>(); int remaider=source.size()%n; //(先计算出余数) int number=source.size()/n; //然后是商 int offset=0;//偏移量 for(int i=0;i<n;i++){ List<T> value=null; if(remaider>0){ value=source.subList(i*number+offset, (i+1)*number+offset+1); remaider--; offset++; }else{ value=source.subList(i*number+offset, (i+1)*number+offset); } result.add(value); } return result; }

不错的文章:https://www.cnblogs.com/shihaiming/p/8572167.html

最新回复(0)