0

我有一个简单的模型视图控制器程序。模型需要定期更新,因此控制器有一个 ScheduledThreadPoolExecutor,它以所需的周期启动一个 Runnable。需要在此 Runnable 中调用模型的方法。

由于模型不是线程安全的——我想避免让它成为线程安全的——所以模型的所有方法都必须从同一个线程调用以避免并发问题。

最好的方法是什么?

4

3 回答 3

1

您可以创建一个与模型具有相同接口的包装类。包装类将调用委托给 ScheduledThreadPoolExecutor 并返回结果。

于 2013-05-23T12:12:38.310 回答
1

你说它是一个 Java MVC 程序......这是否意味着你正在与 GUI 线程同步?在这种情况下,您需要在 Runnable 上调用 SwingUtilities.invokeAndWait() 或 SwingUtilities.invokeLater()。这将在 GUI 线程上运行它并避免视图的线程问题。

是否还有其他非 GUI 方法也可以更新模型?

于 2013-05-23T12:23:49.537 回答
0

最简单的方法是在模型实例上同步:

synchronized(myModel) {
  // periodical view update
}

但是,同步非私有对象并不是最佳实践。所以你很有可能会得到更好的想法。

于 2013-05-23T12:17:35.203 回答