本文的核心内容:@Async注解失效的原因与解决方案。
最近项目优化时:使用@Async异步执行方法,使用信号量控制并发线程数。
@Service
public class AsyncServiceImpl implements AsyncService {
private final Semaphore semaphore = new Semaphore(4);
@Override
public void myAsync() {
System.out.println(Thread.currentThread().getName() + "线程" );
for (int i = 0; i < 10; i++) {
myJob(i+1);
}
}
@Async
public void myJob(int index) {
try {
semaphore.acquire();
System.out.println(Thread.currentThread().getName() + "线程" + index);
Thread.sleep(2000);
} catch (Exception e) {
} finally {
semaphore.release();
}
}
}
通过测试,直接调用myJob(),线程名是一样的,方法是串行执行。
结论:在同一个类中&#