异步调用同步方法?

时间:2016-11-17 18:34:25

标签: java spring multithreading asynchronous

我想从异步调用我的一个方法中受益。由于我使用spring框架,这个任务非常简单,所以我只是用@Async注释标记了方法。

但是我的方法是使用一个全局变量,并不打算由多个线程同时使用(您可能会将其视为javax.jms.Session)。 首先要考虑使用synchronized关键字标记方法,以确保该方法是线程安全的。

但另一方面,在同步方法上使用@Async注释完全是胡说八道,对吗?

在包含synchronized块的方法上使用@Async注释有什么好处吗?

1 个答案:

答案 0 :(得分:0)

制作异步的目的是它将来会做的事情需要相对较长的时间,例如文件或数据库操作,在此期间,你可以做其他有用的操作

在您的情况下,如果您执行内部同步阻止和异步操作,在某些情况下,您将失去异步功能,使得代码块成为您的一部分。当然,如果你同时访问共享资源,你应该为它辩护,真正的问题是,你真的需要在该函数中使用异步功能吗?也许你可以重构你的代码来处理其他地方的同步资源。

此外,如果你真的是异步功能,那么你应该看看Spring 5及其发布的内容。

Spring 5.x