例如,我需要在其余函数得到执行的情况下,在一个完整的独立线程上运行一个函数
public void a(){
// do dome work
}
public void b(){
// do dome work
a()
return "hello"
}
我需要我的代码开始破坏函数a,但不等待函数a结束就返回问候
我尝试了带有spring和@Async批注的任务执行器,但注意到正在工作
public static String mainMEthod() {
asyncMethodWithReturnType();
return "hello";
}
@Async
public static Future<String> asyncMethodWithReturnType() {
for (int i = 0; i < 10; i++) {
System.out.println("Execute method asynchronously - " +
Thread.currentThread().getName());
}
try {
Thread.sleep(5000);
return new AsyncResult<String>("hello world !!!!");
} catch (InterruptedException e) {
//do anything
}
return null;
}
以下是输出:
Execute method asynchronously - main
Execute method asynchronously - main
Execute method asynchronously - main
Execute method asynchronously - main
Execute method asynchronously - main
Execute method asynchronously - main
Execute method asynchronously - main
Execute method asynchronously - main
Execute method asynchronously - main
Execute method asynchronously - main
但它不应在主线程上运行
答案 0 :(得分:3)
@Async
有两个限制:
原因很简单–该方法需要公开,以便可以代理。而且自调用不起作用,因为它会绕过代理并直接调用基础方法。
还请确保正确配置:
@Configuration
@EnableAsync
public class SpringAsyncConfig { ... }
了解更多:
答案 1 :(得分:0)
如果调用方在同一个bean中,则.container{
width: 600px;
height: 400px;
overflow: hidden;
display: -webkit-flex;
}
.left{
background: cyan;
}
.right{
background: orange;
overflow: auto;
height: 100%;
}
.sticky{
position: sticky;
position: -webkit-sticky;
text-align: center;
top: 0;
background: inherit;
}
不能在单独的线程中运行。
所以方法之一是将@Async
方法移至另一个bean,然后从a()
调用它
或者,当我们需要类似的东西时,考虑做我们在Spring Boot项目中所做的事情:
b()
答案 2 :(得分:0)