blockingQueue的并发问题

用的是两个lock,putlock和takelock

这样一来其实就相当于两个线程

但是两个线程操作指针也会有并发问题

如果队列元素个数大于1,是不会有问题的,因为put是在队列尾,take是在队列头部

如果队列元素个数为0或者1,会有可能

在设计上是,先放,再cas加一,取的线程在for循环获取,先看cas取是不是大于0,这样就有了一个先后顺序:必须是放完了,才能取,不会是一边放一边取,所以这里存和取还是互斥的。

猜你喜欢

转载自www.cnblogs.com/chuliang/p/9007408.html