楼主你好,两个线程并发访问map中同一条链,一个线程在尾部删除,一个线程在前面遍历查找,问为什么前面的线程还能正确的查找到后面被另一个线程删除的节点 这个是基于jdk6的吗? jdk6中, HashEntry的 next定义为final,因此每次remove操作都不能简单地修改next指针,就需要将要删除结点的前面所有结点整个赋值一遍。而get方法有可能获得的是仍未修改的 HashEntry 链表 jdk7中 HashEntry的 next没有定义为final,应该不会出现读到脏数据的问题吧 如果我理解错误,烦请指出,情不吝赐教,谢谢。
点赞 1
牛客网
牛客企业服务