首页
社区
课程
招聘
[Xposed开发] 对一个实例的ArrayList成员对象进行遍历访问是否安全
发表于: 2022-12-5 01:50 9294

[Xposed开发] 对一个实例的ArrayList成员对象进行遍历访问是否安全

2022-12-5 01:50
9294

我在 "com.android.server.am.ActivityManagerService" 拿到其成员 mProcessList 里的 mLruProcesses 对象,ArrayList类型:

1
2
3
4
5
mLruProcesses = (ArrayList<?>) XposedHelpers.getObjectField(mProcessList, Enum.Field.mLruProcesses);
 
for(Object obj:mLruProcesses){ // TODO 线程安全?
  //do something...
}

在遍历访问时,该对象在原来的进程里可能还有其他线程对其修改,只读遍历会不会有线程安全问题?有问题的话,该如何避免。

 

或者,通过Hook Replace另一个对其有访问行为的method,这个方法是有@GuardedBy()修饰锁的,我再 XposedHelpers.callMethod 不知是否安全?


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 2428
活跃值: (10698)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
如果只是想遍历的,你可以创建一个新的list,把你关注的list倒进入新的list中,你操作新的list就行
2022-12-5 14:07
0
雪    币: 265
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
不安全的,在遍历的时候,如果这个list的内容减少了,你这段代码就直接崩了,你可以new 一个list,然后将原数组的内容复制到新数组,对新数组进行遍历
2022-12-8 09:07
0
雪    币: 15
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
军哥i 不安全的,在遍历的时候,如果这个list的内容减少了,你这段代码就直接崩了,你可以new 一个list,然后将原数组的内容复制到新数组,对新数组进行遍历
有个疑惑,将原数组复制到新数组,肯定有对原数组的访问读取操作,这个过程是怎样保证线程安全,或者说存在线程安全的操作方式?
2022-12-22 22:43
0
雪    币: 15
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
你瞒我瞒 如果只是想遍历的,你可以创建一个新的list,把你关注的list倒进入新的list中,你操作新的list就行
有个疑惑,将原数组复制到新数组,肯定有对原数组的访问读取操作,这个过程是怎样保证线程安全,或者说存在一个线程安全的操作方式?
2022-12-22 22:43
0
雪    币: 1416
活跃值: (1623)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这不就是纯Java多线程问题么, 怕线程不安全就加锁呗
2022-12-23 01:00
0
雪    币: 2428
活跃值: (10698)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
全都是HOOK 这不就是纯Java多线程问题么, 怕线程不安全就加锁呗
直接new一个list,丢旧数据,这还有需要线程安全?你本来就是在当前线程hook的,同一个线程做事情,哪里来的安全,直接把数据导过来就行。
2022-12-24 12:26
0
游客
登录 | 注册 方可回帖
返回
//