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秒等待一次,然后再次启动。
那么科特林如何解决这个问题呢?