ConcurrentHashMap 扩容原理,多线程环境下如何保证迁移线程安全?
校校建议
JDK1.8 的 CHM 扩容支持多线程协助迁移;
transfer 负责将旧桶数据迁移到新数组。
通过 forwardingNode 标记已经迁移完成的桶,多个线程争抢不同桶,使用 CAS 保证桶的迁移互斥;
迁移完成的桶打上标记,其他线程不会重复处理。
ConcurrentHashMap 扩容原理、transfer 线程安全
校校
ConcurrentHashMap 扩容原理,多线程环境下如何保证迁移线程安全?
JDK1.8 的 CHM 扩容支持多线程协助迁移;
transfer 负责将旧桶数据迁移到新数组。
通过 forwardingNode 标记已经迁移完成的桶,多个线程争抢不同桶,使用 CAS 保证桶的迁移互斥;
迁移完成的桶打上标记,其他线程不会重复处理。