- 博客(3)
- 收藏
- 关注
原创 并发--共享模型管程
正常状态对象一开始是没有 hashCode 的,第一次调用才生成,调用了 hashCode() 后会撤销该对象的偏向锁,调用了对象的 hashCode,但偏向锁的对象 MarkWord 中存储的是线程 id,如果调用 hashCode 会导致偏向锁被撤销,轻量级锁会在锁记录中记录 hashCode,重量级锁会在 Monitor 中记录 hashCode。Thread0解锁时,由于mark word中记录的时Monitor的地址,而非锁记录的地址,因此解锁时,进入重量级解锁的流程.
2023-11-26 21:15:06
885
1
原创 Java并发概述
单线程:类加载,字节码放入方法区,启动main主线程,为main线程分配栈内存,cpu核心运行主线程代码,为主方法提供栈帧内存,栈帧内存存放局部变量,返回地址等。线程cpu时间片用完,垃圾回收,有更高优先级的线程,线程自己调用了sleep,yield,wait,lock等,上下文切换时,通过线程各自的程序计数器记住下一条指令的执行地址,便于恢复。Runnable可运行状态,就绪状态,线程已被常见,可接受调度,但未被分配时间片,running,运行状态,获取了时间片。并行:同一时刻,多核,parallel。
2023-10-20 16:07:19
20
1
原创 HashMap基础
阈值=负载因子*容量,负载因子默认为0.75,原因是根据HashMap的扩容机制,容量的值永远都是2的幂,0.75和任何2的次幂乘积结果都是整数。树节点的大小大约是普通节点的两倍,理想情况下,在随机哈希码下,节点的频率服从泊松分布,若键值对size>数组长度*loadfactor(0.75),数组扩容。扩容,重新进行hash 分配,并且会遍历 hash 表中所有的元素,将 table 初始化和 table 扩容整合,给 table 赋值一个新的数组。若不指定,默认16,扩容后变为原来2倍;
2023-10-20 16:05:33
20
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人