Java vs Kotlin – 同一个类中的Spring @Async方法
我发现在Java中,当您尝试从同一个类中调用@Async方法时,您实际上在同一个线程中运行方法,但是在Kotlin中它以异步方式运行。 看起来像代理包装工作不同。
例:
@Service class BasicService { @Scheduled(fixedRate = 1000) fun asyncCall() { log.info("Async call") doAsync() } @Async("myAsyncExecutor") open fun doAsync() { log.info("DO ASYNC AND SLEEP. Thread: ${Thread.currentThread().name}") Thread.sleep(7000) log.info("Finsh async call") } ... }
当您使用Kotlin doAsync()
通过myAsyncExecutor
异步运行时, myAsyncExecutor
在Java中运行在相同的线程上,并且调度器将每7秒等待一次,然后再次启动。
那么科特林如何解决这个问题呢?
- Kotlin线程使用参数保存本机懒惰单例
- thead.join查杀正在运行的线程java(kotlin)
- Kotlin局部变量线程安全
- 为什么我的Android应用程序中的第一个计算速度很慢,而所有后续的计算都很快
- Kotlin中的多线程数组初始化