您要进行两次同步,这是没有意义的,可能会减慢代码的速度:在列表上进行迭代时所做的更改需要整个操作的同步,在这种情况下,
synchronized(in_queue_list)使用Using
这样做
Collections.synchronizedList()是多余的(它创建了一个包装程序来同步各个操作)。
但是,由于您要完全清空列表,因此迭代删除第一个元素是最糟糕的方法,因为每个元素都必须复制所有后续元素,这使其成为O(n ^ 2)操作-
非常可怕对于较大的列表,速度较慢。
相反,只需调用
clear()-无需迭代。
编辑: 如果您以后需要单方法同步
Collections.synchronizedList(),那么这是正确的方法:
List<Record> in_queue_list = Collections.synchronizedList(in_queue);in_queue_list.clear(); // synchronized implicitly,
但是在很多情况下,单方法同步是不够的(例如,对于所有迭代,或者当您获得一个值时,都基于该方法进行计算,然后将其替换为结果)。在这种情况下,无论如何,您都必须使用手动同步,因此
Collections.synchronizedList()无用的额外开销。



