异步线程池
来源:互联网 发布:python generator 编辑:程序博客网 时间:2024/05/22 01:52
异步线程池
import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.Collection;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.ExecutorService;import java.util.concurrent.Future;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.RejectedExecutionHandler;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class AsyncThreadUtil { private final static Logger logger = LoggerFactory.getLogger(AsyncThreadUtil.class); private static final int corePoolSize = Runtime.getRuntime().availableProcessors() * 50; // 按进程数 * 50 private static final int maxPoolSize = corePoolSize * 2; private static final int maxQueueSize = maxPoolSize * 10; /** * 平均每秒任务数量 * 平均执行等待秒数 / 平均可接受任务处理秒数 * <p> * 假设每秒1000个任务 */ private static final ExecutorService executorService = new ThreadPoolExecutor( corePoolSize, maxPoolSize, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(maxQueueSize), new CustomRejectedPolicy()); public static void execute(Runnable command) { executorService.execute(command); } public static <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) { try { return executorService.invokeAll(tasks); } catch (InterruptedException e) { throw new RuntimeException(e); } } public static <T> Future<T> submit(Callable<T> task) { return executorService.submit(task); } public static void shutdown() { try { executorService.shutdown(); } catch (Exception e) { logger.error(e.getMessage(), e); } } public static int getQueueSize() { return ((ThreadPoolExecutor) executorService).getQueue().size(); } private static class CustomRejectedPolicy implements RejectedExecutionHandler { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { logger.info("executorService reject execute: {}", r.getClass().getName()); if (!executor.isShutdown()) { try { Thread.sleep(100); } catch (InterruptedException e) { logger.error("thread errpr.",e); } executor.execute(r); } } }}
测试:
public static void main(String[] args) {AsyncThreadUtil.execute(new Runnable() {@Overridepublic void run() {// TODO do something}});}
0 0
- 线程池和异步线程
- 异步线程池
- ThreadPoolTaskExecutor异步线程池
- ThreadPoolTaskExecutor异步线程池
- Android异步,线程,线程池,缓存
- java线程 同步与异步 线程池
- java线程 同步与异步 线程池
- java线程 同步与异步 线程池
- 线程、线程池、并发、同步、异步、锁
- 异步线程
- 线程异步
- 线程异步
- 线程高级---异步线程
- c#多线程:线程池和异步编程
- c#多线程:线程池和异步编程
- c#多线程:线程池和异步编程
- 谈异步线程池的设计
- NIO2中异步通道、线程池知识点
- WCF简介
- 点击发送后图片查看大图的实现思路
- redis的使用场景(小场景)
- Java的异常处理
- 技术领导要不要写代码?
- 异步线程池
- 使用AndroidStudio分析和解决ImageLoader引起OOM问题
- 如何为UICollectionView添加整体的header view
- 使用selenium测试网页
- 新站seo优化之一月内上百关键词有排名的技巧
- linux centos6.5 php5.6 安装PHPUnit 5.2.9
- 途牛原创|途牛前端性能优化实践
- Python基础
- Java关键字static、final使用小结