繁体   English   中英

异步调用同步方法?

[英]Asynchronously calling synchronized methods?

我想从异步调用我的方法之一中受益。 由于我使用的是Spring框架,因此此任务非常简单,因此我仅使用@Async批注标记了该方法。

但是,我的方法使用的是一个全局变量,该变量不能被多个线程同时使用(您可能会认为它是javax.jms.Session )。 为了确保该方法是线程安全的,首先要想到的是用synced关键字标记该方法。

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

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

使某事物异步的目的是它将在将来做某事,这将花费相对较长的时间,例如文件或数据库操作,在此期间,您可以进行其他有用的操作

在您的情况下,如果在内部进行同步块和异步操作,则在某些情况下,您将失去异步功能,从而使该部分成为代码块。 当然,如果您同时访问共享资源,则应该捍卫它,这是真正的问题,您是否真的需要在该函数内部使用异步功能? 也许您可以重构代码以处理其他地方的同步资源。

另外,如果您真的很喜欢异步功能和Spring,则应该查看Spring 5及其发布时提供的功能。

春季5.x

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM