假设我有 list_a
,我需要对其进行同步访问。
现在,如果我定义一个指向该对象的指针 list_A
List<...> list_a=Collections.synchronizedList(new ArrayList<JmDNS>());
List<...> list_A=list_a;
我可以同步 List_A
并假设对 List_a
的访问是同步的吗?这是因为 list_a
来自具有私有(private)访问权限的不同类,并且它是从该类内部访问的。
最佳答案
是的,它们引用同一个对象,这是一个同步列表。
注意
我假设您知道使用同步列表只同步列表中的方法调用。
假设你有这样的事情:
if (list_A.size() > 0) {
Object element = list_A.remove(0);
}
单独使用同步列表并不能使其成为线程安全的操作序列,因为两个线程可以同时将 if
条件评估为 true
,然后两者都可以尝试从列表中删除第一个元素。
可以这样解决:
synchronized(list_A) {
if (list_A.size() > 0) {
Object element = list_A.remove(0);
}
}
关于Java:同步对象指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31472875/