我需要某种类型的队列来同步添加新元素和删除新元素:
同步应该是添加元素,删除元素以及添加/删除方法。
我想到了一些选择:
1.找到一个线程安全的队列实现,这意味着无论调用哪个方法都会阻止它访问队列 - >也许不是那么聪明......
2.在某些锁定对象上使用synchronize
添加/删除元素方法.-->这个解决方案看起来有点难看。
您对此有何看法?
答案 0 :(得分:1)
我需要某种类型的队列来同步添加新元素和删除新元素:
您应该使用BlockingQueue
(例如ArrayBlockingQueue
)来处理所有同步。您调用queue.add(...)
添加到队列,另一个线程调用take()
以从队列中删除项目。
答案 1 :(得分:1)
或者:3。使用其中一个线程安全的BlockingQueues,使用无锁算法,并使用阻塞和非阻塞方法。
答案 2 :(得分:1)
对于聪明且不那么丑陋的解决方案,您需要在某个包装器中编写自己的线程安全操作,但不应使用synchronized,而应使用ReadWriteLocks。 无论如何其他不错的选择是谷歌番石榴库。你没有提到任何绑定/阻塞操作需要,所以我不认为BlockingQueue是一个很好的选择。我推荐Guava的ConcurrentLinkedQueue,这是一个基于链接节点的无界线程安全队列。
希望这会有所帮助。有关详细信息,请浏览此链接: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Queues.html
ConcurrentLinkedQueue页面是: http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html?is-external=true