Java:同步对象指针?

标签 java list synchronization synchronized

假设我有 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/

相关文章:

java - 是否可以更改 XSD 文件的限制,而无需 Web 服务消费者进行任何调整?

java - 是否可以在从 Pub/Sub 写入 BigQuery 的 Google Cloud Dataflow 管道中捕获丢失的数据集 java.lang.RuntimeException?

sql - 远程 MSSQL/ODBC 与 Rails 同步

list - 压缩矩形列表

c# - LINQ:String.Join 一个列表,但事先向该字符串添加一个字符

tsql - 同步两个表,最佳实践

c++ - 多个互斥体上的 Windows 同步

java - 子引用图像的其他方式?

java - Java Spring中如何处理并发访问?

r - R:使用子元素对嵌套列表中的值进行计数