1、定时任务;
2、管理页面的导入导出;
3、主要业务与次要业务进行异步解耦;
传统的创建线程的方法:
1、继承 Thread 类
public class Test {
public static void main(String[] args) {
new MyThread().start();
}
}
class MyThread extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "\t" + Thread.currentThread().getId());
}
}
2、实现Runnable 接口
public class Test {
public static void main(String[] args) {
MyRunnable runnable = new MyRunnable();
new Thread(runnable).start();
}
}
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "\t" + Thread.currentThread().getId());
}
}
目前最好的是自定义线程池:
/**
* @author
* 自定义线程池的配置类
*/
@Configuration
@EnableAsync
public class TaskExecutePool{
@Value("${task.executor.core_pool_size}")
private int corePoolSize;
@Value("${task.executor.max_pool_size}")
private int maxPoolSize;
@Value("${task.executor.queue_capacity}")
private int queueCapacity;
@Value("${task.executor.keep_alive_seconds}")
private int keepAliveSeconds;
@Bean(name = "threadPoolTaskExecutor")
public ThreadPoolTaskExecutor SendTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(corePoolSize);
///配置最大线程数
executor.setMaxPoolSize(maxPoolSize);
//配置队列大小
executor.setQueueCapacity(queueCapacity);
/**
* 线程池维护线程所允许的空闲时间--单位秒,超过销毁
* 线程池线程数量大于corePoolSize时候,多出来的空闲线程,多长时间会被销毁
*/
executor.setKeepAliveSeconds(keepAliveSeconds);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("pool-send-task-executor");
/**
* 线程池拒绝策略
*/
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.initialize();
return executor;
}
配置文件中调整线程池参数
task.executor.core_pool_size=10
task.executor.max_pool_size=200
task.executor.queue_capacity=1200
task.executor.keep_alive_seconds=60