因此,在下面的代码中,当我执行yService.performAction()
时,它会为许多项目执行此操作,并且花费了太多时间。
我被建议尝试使用线程来加快速度,所以我上网查看并发现从控制器生成新的子线程是不可取的,因为它可能会弄乱Java EE容器线程池。如果我的yService.performAction(
)需要时间来运行并需要快速运行,我有哪些选择?
许多人一直建议使用Quartz来生成新线程。我不确定我是否想做一些复杂的事情。如何在单独的线程中运行该特定服务?有没有简单的方法呢?
@Controller
@RequestMapping("/test")
public class TestController {
private static final Logger logger = Logger.getLogger(TestController.class);
@Autowired
XService xService;
@Autowired
private YService yService;
@RequestMapping(method = { RequestMethod.GET })
public void testCheck(HttpServletRequest request, HttpServletResponse response) throws IOException {
try {
List<SL> somelist = XService.getAllX();
StringBuffer status = new StringBuffer("SUCCESS\n\n");
for (SL sl : somelist) {
boolean flag = false;
try {
flag = yService.performAction(sl);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().write(status.toString());
} catch (Exception e) {
logger.error(e.getMessage(), e);
response.getWriter().write("FAILED");
}
}
}
答案 0 :(得分:0)
您最好的选择是使用ExecutorService并致电invokeAll()。您可以通过调用Executors.newFixedThreadPool()来检索实例。