可能这是一个基本问题,但希望从此论坛获得确认。在同步块内启动一个新线程
我有下面的代码逻辑:
public Object method1() {
synchronized(this) {
method2();
method3();
method4();
}
method4()
是一个耗时的操作,我不必等待其完成。所以我写了一个弹簧方法拦截器,它将拦截调用并在一个单独的线程中执行它。现在我的问题是方法4执行开始后方法1会立即返回?
下面是拦截代码:
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
Future<Object> future = executorService.submit(new AsyncCallable(
methodInvocation));
Object retVal = null;
try {
retVal = future.get(10, TimeUnit.SECONDS);
} catch (Exception e) {
logger.error("Exception while running the method Async", e);
throw e;
}
return retVal;
} //AsyncCallable implements Callable interface
你是从另一个线程开始的,但你不是马上等待它吗? – Gray 2012-08-07 22:07:33
这很容易,你可以运行它,看看会发生什么。尝试一下! – 2012-08-07 22:07:53
好的。我试着让method4()在无限循环中运行,并在10秒后超时[我的超时限制]。所以method1()肯定会等待线程完成其执行。我没有得到代码中的错误。无论如何,使线程异步? – gad 2012-08-07 22:22:51