多线程与高并发
文章平均质量分 59
死锁的产生与排查,jdk中哪些存在线程不安全,记录锁的使用e.g
Mr.敦的私房菜
95后程序猿,
个人摄影剪辑师
展开
-
【图解】ThreadLocal底层实现原理
1、ThreadLocal的底层原理图说明:Thread中有threadLocals成员变量,threadLocal会在threadlocal首次set时进行赋值【这会在非main线程中复现,主线程启动即会进行赋值】,ThreadLocalMap是ThreadLocal的静态内部类,在set时,会将我们新建threadLocal引用地址作为key,以此封装成一个Entry<ThreadLocal<?>,Object>对象,可以存在多个不同的threadlocal,如果set的引用原创 2022-04-28 11:58:01 · 2002 阅读 · 0 评论 -
synchronized Lock(本地同步)锁的8种情况
Lock(本地同步)锁的8种情况总结与说明: * 题目: * 1.标准访问,请问是先打印邮件还是短信 Email * 2.email方法新增暂停4秒钟,请问是先打印邮件还是短信 Email * 3.新增普通的hello方法,请问先打印邮件还是hello hello * 4.两部手机,请问先打印邮件还是短信 SMS * 5.两个静态同步方法,1部手机,请问先打印邮件还是短信 Email * 6.两个静态同步方法,2部手机,请问先打印邮件还是短信 Email原创 2021-09-23 21:32:06 · 667 阅读 · 0 评论 -
【图解】面试题:ConcurrentHashMap是如何保证线程安全的
注意:JDK1.7与JDK1.8中的ConcurrentHashMap主要延续HashMap的设计与思想,是在其基础上进行的相应优化1.JDK1.7中的底层实现原理(1)JDK1.7ConcurrentHashMap的底层结构,延续HashMap的底层设计,采用数组+链表(2)不同的是:ConcurrentHashMap中的数组被分为大数组和小数组,大数组是Segment,小数组是HashEntrySegment本身是基于ReentrantLock可重入锁来实现加锁和释放锁,这样就能保证多线程同.原创 2022-04-25 19:19:29 · 2996 阅读 · 0 评论 -
【图解】面试题:为什么HashMap会产生死循环
注意:HashMap死循环只会发生在JDK1.7,根本原因是由采用头插法所致(1)JDK1.7中HashMap采用底层结构是数组+链表,在key值发生hash碰撞后,元素entry会采用头节点的插入方式,插入到链表的头部(2)数组长度到达负载临界值触发数组扩容,由于是头插法,原来链表的顺序是A->B->C,扩容后变为C->B->A(3)假设同时有线程T1与T2对数组进行扩容T1、T2同时指向A节点,那么T1.next与T2.next同时指向B节点。假设T2让出时间.原创 2022-04-25 11:33:06 · 1056 阅读 · 0 评论 -
Java死锁编码及定位分析
死锁死锁是什么大学课程中的四个要素:(1)互斥(2)不可抢占(3)循环等待(4)请求保持也就是下图所描述产生死锁的主要原因(1)系统资源不足(2)进程运行推进的顺序不合适(3)资源分配不当【也就是不满足四要素】产生死锁代码package com.atguigu.test_deadlock;import java.util.concurrent.TimeUnit;class HoldLock implements Runnable{ private String lock原创 2020-08-20 23:28:47 · 165 阅读 · 0 评论