java - 将 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
用于此ArrayList
并synchronized
在任何代码中使用修改此列表吗?
解决方案
您可以将此message
参数声明为类中的全局变量并使其成为volatile
. 因此所有线程都将拥有您的对象的相同副本。因此它将带来synchronization
.
推荐阅读
- javascript - elements.style.backgroundColor 返回 undefined
- python - 遍历 PE 文件
- reactjs - 如何获取 Youtube 视频的持续时间而不在 Reactjs 中播放视频
- vue.js - Vue Router 无法在 IE 中运行我的项目
- html - 删除嵌套表格中的边框
- python - 带有 If 的函数
- flutter - 打开应用程序时如何避免打开状态栏和底部按钮栏?
- node.js - 当我在 nuxt 中选择 express 作为集成服务器端框架时,导入、导出和其他 es6 功能不起作用?
- javascript - 单击按钮,将数据添加到 SQL 并再次单击以删除数据,需要 php 代码
- excel - 循环遍历所有数据透视表的所有数据透视字段值