HashMap1.8也会发生死循环
创始人
2024-03-28 14:02:47
0

在网上搜资料时候然后发现网上都说1.7版本的HashMap会发生死链也就是死循环,但是在HashMap中也会产生死循环,接下来直接看代码吧

代码

类名字我忘记改了这是我以前看park时候弄的但是这不重要

当你运行

public class parkAndUnpark {static  Map map = new HashMap<>();static class MyTask implements Runnable{int start = 0;public MyTask(int start){this.start = start;}@Overridepublic void run() {for(int i = start ; i<10000000;i+=2){map.put(Integer.toString(i),Integer.toBinaryString(i));System.out.println(i);}}}public static void main(String[] args) throws InterruptedException {Thread t1 = new Thread(new MyTask(0));Thread t2 = new Thread(new MyTask(1));t1.start();t2.start();//主线程等待两个线程执行完t1.join();t2.join();System.out.println(map.size());}
}

好了这里会阻塞住
但是可能你没阻塞住所以多运行几次

在这里插入图片描述

实验jps查看运行线程

在这里插入图片描述

jstack

使用jstack分析堆栈快照

在这里插入图片描述

两个线程都在运行但是没有输出同时也没有结束这就产生了死循环,所以分析

分析

分析balanceInsertion 方法,上面就可以看到

 static  TreeNode balanceInsertion(TreeNode root,TreeNode x) {//新插入的节点标为红色x.red = true;//无限for循环,定义xp、xpp、xppl、xppr变量,在循环体进行赋值,p就是parents//- root:当前根节点//- x   :新插入的节点//- xp  :新插入节点的父节点//- xpp :新插入节点的祖父节点//- xppl:新插入节点的左叔叔节点//- xppr:新插入节点的右叔叔节点for (TreeNode xp, xpp, xppl, xppr;;) {//为定义的各个变量赋值的过程if ((xp = x.parent) == null) {x.red = false;return x;}else if (!xp.red || (xpp = xp.parent) == null)return root;//重点看这里//如果父节点是爷爷节点的左孩子if (xp == (xppl = xpp.left)) {//如果右叔叔不为空且为红色if ((xppr = xpp.right) != null && xppr.red) {//右叔叔变为黑色xppr.red = false;//父节点变为黑色xp.red = false;//爷爷节点变为黑色xpp.red = true;//将爷爷节点当作起始节点,再次循环,请注意再次循环!!!x = xpp;}//省略其他代码}

总的来说上边的源码就是,新插入一个节点,该方法要保持红黑树的五个性质

性质1. 节点是红色或黑色。
性质2. 根节点是黑色。
性质3 每个叶节点(NIL节点,空节点)是黑色的。
性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5. 从任一节点到其每个叶子的路径上包含的黑色节点数量都相同。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...