【发布时间】:2014-11-08 23:43:22
【问题描述】:
我的 Activity 由一个 BroadcastReceiver 和一个 AsyncTask 组成,它们都更新一个 ArrayList(非常频繁)。我了解 AsyncTask 在后台运行,BroadcastReceiver 和 AsyncTask 线程可能会同时更新 ArrayList。如何使它们成为线程安全的?
编辑:正如亚历山大所说,广播接收器在主线程上运行,除非您以其他方式明确实现它。
【问题讨论】:
-
尝试创建队列结构
-
除非您向我们展示访问和更新列表的代码(在两个线程中),否则不可能给出可靠的答案。 (有多种方法可能起作用...)
-
尽量让它在任何时候都只能访问一次。存储/排队任何其他传入的更改。当然,这仅取决于立即更改的重要性。一种非常幼稚的方法是制作一个静态变量并在每次更改时更改它,这也是可以更改 ArrayList 的条件。也许有更好的方法,但这应该有效。这个问题也存在于例如一个 StringBuilder 和一个 BufferedStringBuilder(BufferedStringBuilder 是 Threadsecure)。也许你可以在那里找到一些有用的东西......我希望这会有所帮助。约翰
标签: java android concurrency