Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 并行执行相同的@Sceduled方法_Java_Spring_Spring Scheduled - Fatal编程技术网

Java 并行执行相同的@Sceduled方法

Java 并行执行相同的@Sceduled方法,java,spring,spring-scheduled,Java,Spring,Spring Scheduled,我有一个用@scheduled注释的e方法。这是一个相当长的运行方法。我需要使用线程池并行运行相同的方法。可能吗?代码是: @Scheduled(fixedRate=100) public void run() { Job job = QUEUE.take(); job.run(); //Takes a long time } 队列有许多作业,我希望使用Spring的计划注释并行运行它们。我认为您可以使用Spring的“@Async”将Job.run方法更改为异步方法,或者使用

我有一个用@scheduled注释的e方法。这是一个相当长的运行方法。我需要使用线程池并行运行相同的方法。可能吗?代码是:

@Scheduled(fixedRate=100)
public void run() {
    Job job = QUEUE.take();
    job.run(); //Takes a long time
}

队列有许多作业,我希望使用Spring的计划注释并行运行它们。

我认为您可以使用Spring的“@Async”将Job.run方法更改为异步方法,或者使用另一种方法创建自己的线程池来执行该作业

/**
 * Created by roman.luo on 2016/9/14.
 */
@Component
@Scope("prototype")
public class JobDelegate implements Job {

    private Job job;

    public JobDelegate(Job job) {
        this.job = job;
    }

    @Async
    public void run(){
        job.run();
    }
}

/**
 * Created by roman.luo on 2016/9/14.
 */
@Component
public class Sceduled extends ApplicationObjectSupport{

    @Scheduled(fixedRate = 100)
    public void run(){
        Job job = QUEUE.take();
        Job jobDelegate = getApplicationContext().getBean(JobDelegate.class,job);
        jobDelegate.run();
    }

}
请记住配置spring xml文件:

<task:executor id="myexecutor" pool-size="5"  />  
<task:annotation-driven executor="myexecutor"/>