【发布时间】:2018-08-21 13:03:05
【问题描述】:
我正在尝试在此处了解 Collections,并在 Race condition 找到了一篇文章
它指出以下代码可能导致竞争条件:
if (! hashtable.contains(key)) {
hashtable.put(key, value);
}
我在一定程度上理解了那里的解释,但我怀疑由于HashTable的方法是同步的,线程1执行put()方法获取整个Hashtable的锁,其他线程2怎么可能?可以执行 containskey() 方法吗?这两个方法不是在哈希表锁上同步的吗?
【问题讨论】:
-
如果线程 1 已经在检查 IF 条件之后但在执行之前放置怎么办?在这种情况下,它不在任何同步中
-
“这两种方法不是在哈希表锁上同步的吗?”是的,但是在调用这两个方法之间会释放锁。
标签: java multithreading synchronization race-condition synchronized