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

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

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

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

https://blog.csdn.net/chichuduxing/article/details/69298730