问题:
用@Test测试多线程接口时,启动服务抛出异常:
Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)
(当该工厂的单例被销毁时,不允许创建单例bean(不要在销毁方法实现中从BeanFactory请求bean !) )
原因:
主线程运行时,启动了线程池,线程池中的任务会加载bean,但因为异步原因,任务提交给线程池后,主线程结束了,开始销毁bean容器,而线程池任务有需要创建出bean,所以出现上述的异常情况。
解决方法:
判断线程池任务是否执行完成; 完成后 主线程再结束;
4 种判断线程池任务是否执行完的方法:
使用 isTerminated 方法判断。
使用 getCompletedTaskCount 方法判断。
使用 CountDownLatch 判断。
使用 CyclicBarrier 判断。
使用方式参考:👇