这个问题最近在Java面试中问到了我。 后来我试着去搜索答案,但是没有找到确切的答案。 如果有人有答案的链接,请告诉我一下。 那么这就是我的问题:
ConcurrentHashMap和Hashtable都是同步的。 但是在写操作时它使用哪种锁机制来进行锁定?
这个问题最近在Java面试中问到了我。 后来我试着去搜索答案,但是没有找到确切的答案。 如果有人有答案的链接,请告诉我一下。 那么这就是我的问题:
ConcurrentHashMap和Hashtable都是同步的。 但是在写操作时它使用哪种锁机制来进行锁定?
static class Segment<K,V> extends ReentrantLock implements Serializable {
private static final long serialVersionUID = 2249069246763182397L;
final float loadFactor;
Segment(float lf) { this.loadFactor = lf; }
}
Segments的构造函数调用ReentrantLock的无参构造函数,并创建一个非公平锁。
ConcurrentHashMap 的两个主要特征是:
可能有两个并行线程同时写入 ConcurrentHashMap。根据 ConcurrentHashMap 的默认实现,最多可以并行写入和读取 16 个线程。但最坏情况是,如果两个对象位于 ConcurrentHashMap 的同一段或分区中,则无法进行并行写入。