Java线程跳转或线程间通信

时间:2013-05-23 12:07:45

标签: java concurrency

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

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

最好的方法是什么?

3 个答案:

答案 0 :(得分:1)

您可以使用与模型相同的接口创建包装类。包装器类委托调用ScheduledThreadPoolExecutor并返回结果。

答案 1 :(得分:1)

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

还有其他非GUI方法也会更新模型吗?

答案 2 :(得分:0)

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

synchronized(myModel) {
  // periodical view update
}

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