spring 线程池

 

基础配置

@EnableAsync
@Configuration
public class TaskExecutorConfig implements AsyncConfigurer {

	// 实现AsyncConfigurer接口并重写getAsyncExecutor方法,并返回一个ThreadPoolTaskExecutor,
	// 这样我们就获得了一个基于线程池TaskExecutor

	
	@Bean
	public Executor getAsyncExecutor() {
		ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
		// 核心线程数10:线程池创建时候初始化的线程数
		taskExecutor.setCorePoolSize(3);
		// 最大线程数20:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程
		taskExecutor.setMaxPoolSize(10);
		// 缓冲队列200:用来缓冲执行任务的队列
		taskExecutor.setQueueCapacity(50);
		// 允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
		taskExecutor.setKeepAliveSeconds(60);

//		  (1) 默认的ThreadPoolExecutor.AbortPolicy处理程序遭到拒绝将抛出运行时RejectedExecutionException;
//		  (2)ThreadPoolExecutor.CallerRunsPolicy 线程调用运行该任务的 execute本身。此策略提供简单的反馈控制机制,能够减缓新任务的提交速度 
//		  (3) ThreadPoolExecutor.DiscardPolicy不能执行的任务将被删除; 
//		  (4) ThreadPoolExecutor.DiscardOldestPolicy如果执行程序尚未关闭,则位于工作队列头部的任务将被删除,然后重试执行程序(如果再次失败,则重复此过程)。

		taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

		
//		  taskCount:线程需要执行的任务个数。 
//		  completedTaskCount:线程池在运行过程中已完成的任务数。
//		  largestPoolSize:线程池曾经创建过的最大线程数量。 
//		  getPoolSize: 获取当前线程池的线程数量。
//		  getActiveCount:获取活动的线程的数量
		 

		taskExecutor.initialize();
		return taskExecutor;
	}

	@Override
	public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
		return AsyncConfigurer.super.getAsyncUncaughtExceptionHandler();
	}

测试代码

@Service
@Slf4j
public class AsyncTaskServiceImpl implements AsyncTaskService {
	// synchronized 一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,
	// 当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入
	@Override
	@Async
	public synchronized void dataTranslate(int i) {
		try {
//			Thread.sleep(3000);
			log.info("启动了线程"+i);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
//	@Override
//	@Async
//	public void dataTranslate(int i) {
//		try {
//			synchronized (this) {
////				Thread.sleep(3000);
//				log.info("启动了线程" + i);
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//	}

}

 

 

你可能感兴趣的:(spring)