Java 如何设置@Async方法线程优先级-spring引导?

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 =

我在Spring Boot中有一个异步方法:

@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));