[英]Java thread-hopping or inter-thread communication
我有一個簡單的模型 - 視圖 - 控制器程序。 模型需要定期更新,因此控制器有一個ScheduledThreadPoolExecutor,用於啟動具有所需周期的Runnable。 需要在此Runnable中調用模型的方法。
由於模型不是線程安全的 - 我想避免必須使其成為線程安全的 - 所有模型的方法都必須從同一個線程調用,以避免並發問題。
最好的方法是什么?
您可以使用與模型相同的接口創建包裝類。 包裝器類委托調用ScheduledThreadPoolExecutor並返回結果。
你說它是一個Java MVC程序......這是否意味着你正在與GUI線程同步? 在這種情況下,您需要在Runnable上調用SwingUtilities.invokeAndWait()或SwingUtilities.invokeLater()。 這將在GUI線程上運行它,並避免線程與視圖的問題。
還有其他非GUI方法也可以更新模型嗎?
最簡單的方法是在模型實例上進行同步:
synchronized(myModel) {
// periodical view update
}
但是,同步非私有對象不是最佳做法 。 所以你很有可能獲得更好的想法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.