在Spring中管理由一个控制器的不同实例创建的线程

时间:2014-01-14 10:01:06

标签: spring controller ffmpeg threadpool

我已经编写了一个处理视频上传的控制器。对我来说困难的部分是将视频类型转换为mp4和webm。我选择在我的控制器中新建一个线程,线程将新建一个名为“ffmpeg”的视频转换软件。

问题是这个线程会占用太多资源(至少25%的CPU使用率)。所以我想我必须让不同控制器实例创建的这些线程在共享队列中执行。将这些线程并发执行是非常糟糕的。

Spring中的taskExecutor似乎只能管理一个控制器实例创建的线程。有没有办法管理由一个控制器类创建的线程但不同的实例之间的线程?它似乎是一个公共或共享线程池..

1 个答案:

答案 0 :(得分:0)

我不确切知道你的项目是如何设置的,但如果它有意义,那就是我的意思。

@Controller
@RequestMapping(value = "/convert")
public class UploadController {
    ExecutorService threadPool = Executors.newFixedThreadPool(2);

    @RequestMapping(method = RequestMethod.GET)
    public ModelAndView processVideoConvert() throws InterruptedException {

    final ModelAndView modelAndView = new ModelAndView("convert");

    threadPool.submit(new Runnable() {
        @Override
        public void run() {
          //first conversion
        }
    });

    threadPool.submit(new Runnable() {
        @Override
        public void run() {
         //second conversion
        }
    });

    threadPool.shutdown();
    //threadPool.awaitTermination(500L, TimeUnit.MILLISECONDS);
    return modelAndView;
    }
}