如何正确的使用java.util.ConcurrentLinkedQueue
发布网友
发布时间:2022-04-08 18:43
我来回答
共1个回答
热心网友
时间:2022-04-08 20:12
如果直接使用它提供的函数,比如:queue.add(obj); 或者 queue.poll(obj);,这样我们自己不需要做任何同步。但如果是非原子操作,比如:
Java代码
if(!queue.isEmpty()) {
queue.poll(obj);
}
if(!queue.isEmpty()) {
queue.poll(obj);
}
我们很难保证,在调用了 isEmpty() 之后,poll() 之前,这个 queue 没有被其他线程修改。所以对于这种情况,我们还是需要自己同步:
Java代码
synchronized(queue) {
if(!queue.isEmpty()) {
queue.poll(obj);
}
}