【发布时间】:2017-08-15 14:26:56
【问题描述】:
我编写了一段代码来检查 Spring 框架中的 @Async 注释行为。
@RequestMapping( value="/async" , method = RequestMethod.GET)
public ModelAndView AsyncCall(HttpServletRequest request)
{
async1();
async2();
return new ModelAndView("firstpage");
}
@Async
private void async1(){
System.out.println("Thread 1 enter");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Thread 1 exit");
}
@Async
private void async2(){
System.out.println("Thread 2 enter");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Thread 2 exit");
}
这段代码的输出如下。
Thread 1 enter
Thread 1 exit
Thread 2 enter
Thread 2 exit
通过查看此输出,这两个@Async 函数调用本身似乎是同步的。
据我所知,这两个是不同的线程,应该自己异步运行。
根据正在打印的spring代理调用日志更改代码后的样子。
主线程名称:http-apr-8080-exec-8
Thread 1 enter
Async-1 Thread Name: neutrinoThreadPoolExecutor-1
Thread 1 exit
Thread 2 enter
Async-2 Thread Name: neutrinoThreadPoolExecutor-1
Thread 2 exit
两个异步调用的线程名称相同,但似乎仍然没有呈现异步行为。
【问题讨论】:
-
代理建议不适用于自调用...
-
我已经用 spring 代理建议更改了代码。
标签: java spring spring-mvc asynchronous