作者coolcomm (coolcomm)
看板java
标题[问题] 想请问一段多执行绪的程式码
时间Thu Jan 24 22:06:44 2013
以下程式码节录自org.apache.commons.lang3.builder.HashCodeBuilder
private static final ThreadLocal<Set<IDKey>> REGISTRY = new ThreadLocal<>();
static void register(Object value) {
synchronized(HashCodeBuilder.class) {
if (getRegistry() == null) { REGISTRY.set(new HashSet<IDKey>()); }
}
getRegistry().add(new IDKey(value));
}
想请问
ThreadLocal不是thread-safe吗 为甚麽还要加上synchronized关键字?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.163.82.56
另外 synchronized(HashCodeBuilder.class) 有什麽特别含意吗
为什麽不直接写 synchronized(this)...
※ 编辑: coolcomm 来自: 1.163.82.56 (01/24 22:12)
1F:→ tkcn:因为 register 是 static method,没有 this 01/24 22:24
3F:→ coolcomm:所以和static void synchronized register完全一样罗? 01/24 22:29
4F:→ tkcn:是,但你上面的例子还有个 getRegistry 在外面,所以不同 01/24 23:16
5F:→ coolcomm:嗯 这部分了解了 01/24 23:21
※ 编辑: coolcomm 来自: 1.163.82.56 (01/24 23:24)
6F:→ n3oanderson:This is check then act scenario, which is not 01/26 15:37
7F:→ n3oanderson:thred safe. 01/26 15:39
囧 我发现我忘了贴getRegistry()的定义
static Set<IDKey> getRegistry() { return REGISTRY.get(); }
就这样一行
※ 编辑: coolcomm 来自: 114.43.180.83 (01/27 09:11)
※ coolcomm:转录至看板 Programming 02/05 19:37