ジンクォン:
私はこのようなコードを見てみましょう。
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<>() ) ;
参照してくださいこの質問を。