Synchronized ArrayList作为静态方法参数

时间:2018-05-18 03:57:44

标签: java android synchronized

我有这样的方法:

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使用ArrayList&amp;在任何代码中使用synchronized修改此列表?

1 个答案:

答案 0 :(得分:0)

您可以将此message参数声明为类中的全局变量,并将其设为volatile。因此,所有线程都将具有相同的对象副本。因此,它将带来{{1 }}。