如何正确的使用java.util.ConcurrentLinkedQueue
推荐于2016-07-08 · 知道合伙人互联网行家
关注
展开全部
如果直接使用它提供的函数,比如: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);
}
}
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);
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询