我想实现一个队列,能够被多个线程访问。
这个队列位于单例类中。
现在,简单的解决方案是同步它吗?我假设这是标准做法? 不过,我希望将写入操作优先考虑。
所以,写入是高优先级,读取是低优先级。
这是否可行? 如果可能的话,最好能够由多个线程进行写入而无需同步。
我想实现一个队列,能够被多个线程访问。
这个队列位于单例类中。
现在,简单的解决方案是同步它吗?我假设这是标准做法? 不过,我希望将写入操作优先考虑。
所以,写入是高优先级,读取是低优先级。
这是否可行? 如果可能的话,最好能够由多个线程进行写入而无需同步。
你为什么要避免同步?虽然有可能编写“无锁”结构,但是这很棘手,容易出错。
如果我是你,我会使用 ArrayBlockingQueue
或 ConcurrentLinkedQueue
(或者来自 java.util.concurrent
的其他结构),让你的生活更轻松!
哦,我忘记了关于优先读取而不是写入的部分。你可以使用 ReentrantReadWriteLock
类来实现。然后你就不需要一个线程安全的队列-只需根据是读还是写来外部锁定读写锁即可。
java.util.concurrent
里的东西呢?尤其是无锁的情况下,这并不是一件简单的事情。在现代JVM上,锁的性能表现很好,在写入密集的环境中,基于事务重试的无锁解决方案可能会被锁轻易地超越。 - Marko TopolnikConcurrentLinkedQueue
。 - fge