有害なのWeakHashMap非同期ですか?

ジンクォン:

私はこのようなコードを見てみましょう。

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、マルチスレッド環境の場合には、同期させますか?

バジルボーク:

有害なのWeakHashMap非同期ですか?

はい。あなたは、使用に追加の保護を追加する必要がありますWeakHashMapスレッド間。

したがって、提案は、クラスのJavadocで見つかりました:

同期WeakHashMap用いて構築することができるCollections.synchronizedMap方法を

PATTERNS = Collections.synchronized( new WeakHashMap<>() ) ;

参照してくださいこの質問を

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=234379&siteId=1