首页 > 解决方案 > 将 ArrayList 同步为静态方法参数

问题描述

我有这样的方法:

public static void normalizeMessages(ArrayList<Message> messages){
    synchronized (messages) {
        Collections.sort(messages, new Comparator<Message>() {

            @Override
            public int compare(Message lhs, Message rhs) {
                return lhs.getId().compareTo(rhs.getId());
            }
        });
    }
    // do something with sorted list
} 

ArrayList可以在其他线程的某个地方修改(添加、删除项目),所以我必须使用synchronized.
但我不确定这种方式是否正确,因为我收到了一个警告Android studio方法参数“消息”上的同步
我需要Collections.synchronizedList用于此ArrayListsynchronized在任何代码中使用修改此列表吗?

标签: javaandroidsynchronized

解决方案


您可以将此message参数声明为类中的全局变量并使其成为volatile. 因此所有线程都将拥有您的对象的相同副本。因此它将带来synchronization.


推荐阅读