簡體   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