Java 如何设置@Async方法线程优先级-spring引导?
我在Spring Boot中有一个异步方法:Java 如何设置@Async方法线程优先级-spring引导?,java,spring-boot,asynchronous,Java,Spring Boot,Asynchronous,我在Spring Boot中有一个异步方法: @Async 公共无效计算结果(列表矩阵){ //计算 } 此方法在控制器上调用 我想降低此计算方法线程的优先级。我该怎么做?使用异步命令,您无法实现这一点@Async仅接受自定义任务执行器。。没有办法设定优先级。但是你可以像这样手工操作: @Autowired private TaskExecutor taskExecutor; @Autowired private JobBusiness jobBusiness; ... Task task =
@Async
公共无效计算结果(列表矩阵){
//计算
}
此方法在控制器上调用
我想降低此计算方法线程的优先级。我该怎么做?使用异步命令,您无法实现这一点
@Async
仅接受自定义任务执行器。。没有办法设定优先级。但是你可以像这样手工操作:
@Autowired
private TaskExecutor taskExecutor;
@Autowired
private JobBusiness jobBusiness;
...
Task task = new Task(jobBusiness::performSomethingOn, job);
taskExecutor.execute(new FutureCustomTask(task));
创建此bean:
@Bean("CustomTaskExecutor")
public TaskExecutor threadPoolTaskExecutor(
@Value("${spring.async.core-pool-size}") int corePoolSize,
@Value("${spring.async.max-pool-size}") int maxPoolSize,
@Value("${spring.async.queue-capacity}") int queueCapacity) {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor() {
@Override
protected BlockingQueue<Runnable> createQueue(int queueCapacity) {
return new PriorityBlockingQueue<Runnable>(queueCapacity);
}
};
executor.setCorePoolSize(corePoolSize);
executor.setMaxPoolSize(maxPoolSize);
executor.setQueueCapacity(queueCapacity);
return executor;
}
我的回答来自
同时查看教程……您需要自定义taskExecutor。使用异步u无法设置优先级
public class FutureCustomTask extends FutureTask<FutureCustomTask> implements Comparable<FutureCustomTask> {
private Task task;
public FutureCustomTask(Task task) {
super(task, null);
this.task = task;
}
@Override
public int compareTo(FutureCustomTask o) {
return task.getJob().getPriority().compareTo(o.task.getJob().getPriority());
}
}
@Autowired
private TaskExecutor taskExecutor;
@Autowired
private JobBusiness jobBusiness;
...
Task task = new Task(jobBusiness::performSomethingOn, job);
taskExecutor.execute(new FutureCustomTask(task));