首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非同步WeakHashMap有害吗?

非同步WeakHashMap有害吗?
EN

Stack Overflow用户
提问于 2019-07-14 13:14:12
回答 2查看 370关注 0票数 2

我有个代码看起来像这样。

代码语言:javascript
复制
private static Map<String, Pattern> PATTERNS;

private static Map<String, Pattern> patterns() {
    if (PATTERNS == null) {
        PATTERNS = new WeakHashMap<>(); // ok? or should be synchronized?
    }
    return PATTERNS;
}

// intending to reuse those pre-compiled patters
private static Pattern pattern(final String regex) {
    return patterns().computeIfAbsent(
            requireNonNull(regex, "regex is null"), Pattern::compile);
}

我已经知道WeakHashMap不是同步的。我只是不关心Pattern的多个结构。

在多线程环境中,应该同步PATTERNS吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-14 15:25:45

非同步WeakHashMap有害吗?

是。必须添加其他保护才能跨线程使用WeakHashMap

因此,Javadoc类中的建议如下:

可以使用WeakHashMap方法构造同步Collections.synchronizedMap

代码语言:javascript
复制
PATTERNS = Collections.synchronized( new WeakHashMap<>() ) ;

this Question

票数 2
EN

Stack Overflow用户

发布于 2019-07-14 13:39:52

多线程使用HashMap会导致无限循环。同时重哈希可以使桶形成一个链。

一般来说,避免任何有种族条件的东西。例如,有一些异常,不可变的缓存值。

另外:

表示值的类型(如String )不是用作WeakHashMap键的好类型。

除了JVM提供的免费初始化之外,懒惰初始化通常不值得。在这种情况下,你可能会得到两张地图,这并不特别重要。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57027764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档