2 stone yw stone_yw 于 2017.08.28 14:23 提问

阻塞队列问题探讨--锁的问题

今天看了一下ArrayBlockingQueue的源码,发现在take和put时用的是同一把锁,也就
是说在获取数据时是不能添加数据的。这样的话,岂不是性能降低了?为什么这么实现呢?
如果在添加和获取数据用两把锁,好像也不会产生线程安全问题?求大神解答啊

2个回答

oschina_39814655
oschina_39814655   2017.08.28 15:14

两个线程同时访问同一成员变量应该会有线程安全问题吧

oyljerry
oyljerry   Ds   Rxr 2017.08.29 21:02

添加跟读取要从array中修改,所以需要加锁。租塞队列的目的就是为了线程安全而牺牲一点性能。你多个线程插入,读取都是安全的。

Csdn user default icon
上传中...
上传图片
插入图片