@async在spring中的行为是同步的

Jit*_*dav 0 java spring asynchronous spring-mvc

我编写了一段代码来检查@AsyncSpring框架中的注释行为.

@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");
  }
Run Code Online (Sandbox Code Playgroud)

此代码的输出如下.

Thread 1 enter
Thread 1 exit
Thread 2 enter 
Thread 2 exit
Run Code Online (Sandbox Code Playgroud)

通过查看此输出,似乎这两个@Async函数调用本身是同步的.

据我所知,这两个是不同的线程,应该自己异步运行.

根据弹簧代理调用日志更改代码后打印就像.

主线程名称: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
Run Code Online (Sandbox Code Playgroud)

两个异步调用的线程名称相同,但似乎不呈现异步行为.

Ama*_*har 8

这些情况@Async对我不起作用

  1. @EnableAsync 失踪
  2. @Async 方法不公开
  3. @Async注释方法是从同一个类的另一个方法调用的.可能绕过异步代理代码并只调用普通方法.