2014-01-14 3 views
0

Я написал контроллер для обработки видео. Для меня сложной задачей является преобразование типа видео в mp4 и webm. Я выбрал новый поток в моем контроллере, и поток будет новым процессом, который является программным обеспечением для преобразования видео под названием «ffmpeg».Весной управляйте потоками, созданными разными экземплярами одного контроллера.

Проблема в том, что этот поток будет занимать слишком много ресурсов (не менее 25% использования ЦП). Поэтому я предполагаю, что для создания этих потоков, созданных разными экземплярами контроллера, выполняется в общей очереди. Ужасно иметь эти потоки одновременно.

Кажется, что taskExecutor весной может управлять потоками, созданными одним экземпляром контроллера. И есть ли способ управлять потоками между потоками, созданными одним классом контроллера, но разными экземплярами? Это похоже на общий или общий пул потоков.

+0

Как насчет ExecutorService, из которого вы фиксируете threadpool из 2 потоков и добавляете два преобразования в пул? – Vaelyr

ответ

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; 
    } 
} 
+0

Это действительно спасает меня! Большое спасибо ! И, кстати, есть ли какие-либо проблемы, если я прокомментирую заявление «threadPool.shutdown();» ? – lubovbyc

+0

В противном случае, если число потоков превышает 2, оно всегда будет вызывать исключение Reject, даже если задачи в пуле завершены. – lubovbyc

+0

Хмм, я не совсем уверен, я полагаю, что на самом деле вы должны завершить работу с ожиданием завершения, поэтому после выключения ожидания убедитесь, что все задачи выполнены. Таким образом, вам придется раскомментировать окончание, но удалите тайм-аут, если у вас нет определенного времени, как долго вы хотите дождаться завершения задач. – Vaelyr

Смежные вопросы