簡體   English   中英

Java線程跳轉或線程間通信

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM