【发布时间】:2019-11-23 10:46:44
【问题描述】:
我的代码看起来像这样。
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 没有同步。我只是不关心Patterns 的多重构造。
如果是多线程环境,PATTERNS 是否应该同步?
【问题讨论】:
-
您是否尝试实现singleton pattern?如果是这样,在定义时初始化字段,这保证了线程安全的初始化。如果这太昂贵并且您需要即时创建线程安全的单例,this article 在最后有一个可行的解决方案。
-
@Turing85 不,先生。我打算重用预编译的模式。
标签: java thread-safety concurrentmodification weakhashmap