gpt4 book ai didi

java - Collections.synchronizedMap()和synchronized之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:31 27 4
gpt4 key购买 nike

如果我创建 map

Map map=new HashMap(40,.75f);

通过以下两种不同的方式进行同步

Collections.synchronizedMap(map) :- which is internally using mutex
synchronized(map){}

以上两种方法有什么区别。

最佳答案

Collections.synchronizedMap(map) :- which is internally using mutex
synchronized(map){}

what is the difference between the two above approaches.

不同之处在于,Collections.synchronizedMap(map) 通过将 map 包装在同步对象中来为您执行同步。如果查看 Collections 类的 Java 源代码,您应该会看到 SynchronizedMap 对象。在那里它做了类似的事情:

final Object      mutex;        // Object on which to synchronize
...
public int size() {
synchronized (mutex) {return m.size();}
}

因此,它在内部的作用与您在外部调用 synchronized 的作用相同。然而,这需要您手动进行猜测和编程。它可以帮助您避免丢失和不保护重要的方法调用,或者将您的 Map 传递到另一个无法正确同步它或其他内容的库。

还有第三个选项可能更好,那就是使用 ConcurrentHashMap。这是一个从头开始编写的 HashMap ,允许多个线程并行操作它。它将提供比您提到的两个选项更好的性能。

关于java - Collections.synchronizedMap()和synchronized之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22530076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com