Java 中的并发队列和阻塞队列
我有一个经典的问题,一个线程将事件推送到第二个线程的传入队列。只是这一次,我对性能非常感兴趣。我想实现的是:
- 我想要并发访问队列,生产者推送,接收器弹出。
- 当队列为空时,我希望使用者阻塞到队列,等待生产者。
我的第一个想法是使用 ,但我很快意识到它不是并发的,性能受到影响。另一方面,我现在使用,但我仍在支付每个出版物的费用。由于使用者在找到空队列时不会阻塞,因此我必须同步并锁定。另一方面,制片人必须抓住每一份出版物的锁。总体结果是,我支付了每一份出版物的费用,即使不需要。LinkedBlockingQueue
ConcurrentLinkedQueue
wait()
notify()
wait()
notify()
sycnhronized (lock) {lock.notify()}
我想这里需要的是一个既阻塞又并发的队列。我想象一个操作,当推送的元素是列表中的第一个元素时,对对象有一个额外的操作。我认为这样的检查已经存在于 中,因为推送需要与下一个元素连接。因此,这比每次在外部锁定上进行同步要快得多。push()
ConcurrentLinkedQueue
notify()
ConcurrentLinkedQueue
这样的东西可用/合理吗?