ConcurrentLinkedQueue学习(三)

    xiaoxiao2024-04-22  4

    ConcurrentLinkedQueue应该注意的地方   刚开始认为使用了ConcurrentLinkedQueue类之后意味着不需要自己进行任何同步或加锁操作,查了下资料, 如果直接使用它提供的函数,比如:queue.add(obj); 或者 queue.poll(obj);,这样我们自己不需要做任何同步。 但如果是非原子操作,比如:   if(!queue.isEmpty()) {    queue.poll(obj);    }  我们很难保证,在调用了isEmpty()之后,poll()之前,这个queue没有被其他线程修改。 所以对于这种情况,我们还是需要自己同步: synchronized(queue) {     if(!queue.isEmpty()) {       queue.poll(obj);     }    }   当然,如果是可以接受的脏读同样可以不用加synchronized
    转载请注明原文地址: https://ju.6miu.com/read-1288236.html
    最新回复(0)