Java线程池几种简单使用方式

1.提供公共的线程池工具类,示例:

private static ThreadPoolTaskExecutor taskExecutor = null;
	private static Integer corePoolSize = 10;
	private static Integer maxPoolSize = 20;
	private static Integer queueCapacity = 1000;
    static {
        taskExecutor = new ThreadPoolTaskExecutor();
        // 核心线程数,队列未满之前可执行线程数是按照 core的size
        taskExecutor.setCorePoolSize(corePoolSize);
        // 最大线程数,原来50 8.10号改为20,队列满的时候执行线程数为max的size
        taskExecutor.setMaxPoolSize(maxPoolSize);
        // 队列最大长度
        taskExecutor.setQueueCapacity(queueCapacity);
        // 线程池维护线程所允许的空闲时间(单位秒)
        taskExecutor.setKeepAliveSeconds(120);
        // 线程池对拒绝任务(无线程可用)的处理策略 ThreadPoolExecutor.CallerRunsPolicy策略 ,调用者的线程会执行该任务,如果执行器已关闭,则丢弃.
        taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());

        taskExecutor.initialize();
    }

    public static void run(Runnable runnable) {
        taskExecutor.execute(runnable);
    }	

调用示例:

ThreadTaskUtils.run(new Runnable() {
	public void run() {
	    log.info("异步线程");	 
	}
});

2.使用spring注解,自主配置线程池信息,在项目中加入下面代码:

@Bean(name = "threadPoolTask")
	public ThreadPoolTaskExecutor getAsyncThreadPoolTaskExecutor() {
		logger.info("threadPoolTask start...");
		ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
		taskExecutor.setCorePoolSize(15);
		taskExecutor.setMaxPoolSize(50);
		taskExecutor.setQueueCapacity(5000);// 队列最大长度
		taskExecutor.setKeepAliveSeconds(200); // 线程池维护线程所允许的空闲时间
		taskExecutor.setThreadNamePrefix("test-pool-");
		// 线程池对拒绝任务(无线程可用)的处理策略,目前只支持AbortPolicy、CallerRunsPolicy;默认为后者
		taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
		// 调度器shutdown被调用时等待当前被调度的任务完成
		taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
		// 等待时长
		taskExecutor.setAwaitTerminationSeconds(60);
		taskExecutor.initialize();
		return taskExecutor;
	}

在需要使用异步的位置,加上注解:@Async("threadPoolTask");

在启动类加上注解:@EnableAsync

注意事项:在调用本类子方法时,方法上加上注解无效,示例:

public void autoCheck() {
    checkOrder();
}
	
@Async("scheduledPoolTaskExecutor")
public void checkOrder() {

}

使用上面的写法,异步不生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值