
假设有两个线程,线程1和线程2,两个线程进行hashMap的put操作,触发了扩容。
线程1和线程2 都进入if,然后线程1没有拿到cpu的资源在上面代码注释的地方停下了。此时的变量指针如下图所示:

记住 线程1中 E变量指向a结点,next变量指向b结点。
下面是线程2 拿到cpu的资源,执行结点转移


因为之前线程1中E变量指向的是a结点,next变量指向的是b结点,所以如下图所示:

本文探讨了在多线程环境下,两个线程同时进行HashMap的put操作可能导致的并发问题。线程1在扩容操作中暂停,而线程2继续执行,造成节点转移时的数据不一致。这种情况可能导致死锁或数据错误,强调了在并发编程中使用线程安全的数据结构或同步机制的重要性。

假设有两个线程,线程1和线程2,两个线程进行hashMap的put操作,触发了扩容。
线程1和线程2 都进入if,然后线程1没有拿到cpu的资源在上面代码注释的地方停下了。此时的变量指针如下图所示:

记住 线程1中 E变量指向a结点,next变量指向b结点。
下面是线程2 拿到cpu的资源,执行结点转移


因为之前线程1中E变量指向的是a结点,next变量指向的是b结点,所以如下图所示:

1432
6245

被折叠的 条评论
为什么被折叠?