java并发编程
java异步编程
1.创建线程池
public final class ConcurrentUtils {
private static final ExecutorService POOL;
private static final ListeningExecutorService poolService;
static {
POOL = new ThreadPoolExecutor(
4,
8,
0L,
TimeUnit.SECONDS, new LinkedBlockingQueue<>(2048),
new ThreadFactoryBuilder().setNameFormat("doc-asyn-pool-%d").build(),
new ThreadPoolExecutor.AbortPolicy());
poolService = MoreExecutors.listeningDecorator(POOL);
}
ThreadPoolExecutor 是 Java 中用于管理线程池的类。
最小和最大线程数: POOL 被配置为拥有最小4个线程和最大8个线程。
这意味着即使没有任务执行,线程池也会维持4个线程的活跃状态,以便能够快速响应任务的到来
。同时,最多允许同时存在8个活跃的线程。keepAliveTime 空闲线程存活时间
一个线程如果处于空闲状态,并且当前的线程数量大于corePoolSize,那么在指定时间后,这个空闲线程会被销毁,这里的指定时间由keepAliveTime来设定,这在某些场景下可以帮助释放系统资源。LinkedBlockingQueue<>(2048)
是一个阻塞队列,用于存储等待执行的任务,最大容量为2048ThreadFactoryBuilder().setNameFormat("doc-asyn-pool-%d").build()
创建一个线程工厂,用于为线程池中的线程命名,格式为 "doc-asyn-pool-1","doc-asyn-pool-2" 等new ThreadPoolExecutor.AbortPolicy()
是一个饱和策略,当队列和线程池都满了之后,新任务将被丢弃,并抛出RejectedExecutionException 异常poolService = MoreExecutors.listeningDecorator(POOL)
使用 Guava 的 MoreExecutors.listeningDecorator 方法来创建一个监听器装饰的线程池,使得线程池支持异步操作,返回一个 ListeningExecutorService