Sal*_*Sal 4 java synchronization
如果一个队列要被多个线程访问,但它目前只被一个方法修改getNextInQueue()
,那么同步访问队列的最合适形式是什么?
目前,我将队列声明为a ConcurrentLinkedQueue
,但我不希望在多个线程等待释放锁的情况下达到死锁.我可以解决这个问题的另一种方法是不同步队列,而是同步getNextInQueue()
.但是,由于将来会使用此代码,我认为这也不会扩展.(每个对队列进行修改的程序员都必须确保她同步操作.)
思考?
我认为最简单,最正确的方法是使用ConcurrentLinkedQueue
.但是,我不相信这会导致僵局.但是,我不确定的一件事是Concurrent包装器如何处理使用迭代器的情况.我似乎记得不得不回到synchronized
将所有调用包装到底层集合(读取和写入)的旧方法.我很确定这是Concurrent包装器正在做什么.