【发布时间】:2015-02-27 18:44:20
【问题描述】:
我正在实现一些我称之为“可观察集”的东西。它只是一个普通的集合,但它可以让一些观察者收到有关添加新元素的通知。
对我来说重要的是,元素可以同时从许多线程中添加,并且还有许多观察线程。我在 CopyOnWriteArrayList 中持有观察者(它是线程安全的)。关键是通知观察者添加元素的方式,每个观察者的通知顺序与添加元素的顺序相同。
什么是最好的方法?
最幼稚的一种是将添加和通知放在“同步”块中。但我相信它可能会很慢等。
我尝试的第二个方法是将元素添加到集合中,然后将其添加到“通知队列”中。每次添加元素时,都会检查是否打开了通知。如果不是,它会一直启动,直到队列为空。它工作得很好,但我担心这不是很好的方法。
我实现的最后一个,我称之为“通知线程”。通过添加观察者,每个观察者都创建了自己的“通知线程”。该线程在后台运行并检查它是否位于全局“通知队列”的末尾。如果不是,它会通知特定线程有关新元素的信息。但是,我在同步和 while(true) 循环方面存在问题。我不知道如何设置条件来结束线程。我在写的时候注意到的下一个问题是,每一个新线程都会从一开始就被通知......这不好。
我希望我已经很好地描述了一切。如果没有,请告诉我,我会尝试修复它。 完成这项任务的最佳方法是什么? 谢谢!
【问题讨论】:
-
"最幼稚的做法是将添加和通知放在“同步”块中。但我相信它可能会很慢等。"你真的试过看它是否很慢?
-
@Sizik 是对的。在您知道需要优化之前,请始终保持简单。
-
好吧,我已经尝试过了:)但是我为之做的人不允许这样做。这会很慢,因为添加时您必须等待通知所有观察者才能添加下一个元素,而它可以由其他线程同时完成..
标签: java multithreading observers