1

因此,在下面的代码中,当我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");
    }
}

}

4

1 回答 1

1

您最好的选择是使用 ExecutorService 并调用invokeAll()。您可以通过调用Executors.newFixedThreadPool()来检索实例。

于 2013-04-05T07:55:53.487 回答