如何防止我的竞争条件

时间:2016-09-21 06:30:31

标签: android multithreading

我正在做一个Android应用程序,我有一个UI来显示从服务器收到的一些数据。数据保存在控制器的db中。 当应用程序启动时,这就是它正在做的事情:

  1. 控制器实例在Ui线程上初始化,它是单例。初始化是轻量级的。 UI将调用控制器方法以获取保存在内存中的数据并显示它。
  2. 让工作线程执行一些控制器方法从db读取数据并将其保存在内存中的缓存中,并在获取后通知UI。
  3. 每当有新数据时,服务器都会向客户端发送推送服务器,然后控制器与服务器通信以获取数据并更新缓存,在完成后,它会通知用户界面。
  4. 所以问题是2和3,因为两者都在不同的线程中运行,所以为了确保必须首先读取db并保存在缓存中,我在3)中有一个标志,以便在写入新的之前在内存中的数据,我总是先检查标志。它会工作,但因为我可以预见缓存上可能有更多的操作可能跨越不同的线程,我真的不想在所有这些地方添加标志检查,所以我们有任何模式/方式来确保2 )总是先发生?

    抱歉,我没有找到任何类似的帖子。感谢。

1 个答案:

答案 0 :(得分:0)

确定当你的语句2完成时,在最后一行代码执行时调用广播接收器,并在BroadCastReceiver内部的onRecieve()方法内执行语句3。