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秒等待一次,然后再次启动。

那么科特林如何解决这个问题呢?