- 博客(3)
- 收藏
- 关注
原创 深入理解Java线程池及源码解析
为什么使用线程池 在Java虚拟机的线程模型中,Java线程(Thread)被一对一映射为操作系统内核线程。Java线程启动时会创建一个操作系统内核线程;当Java线程终止时,操作系统内核线程也会被回收,这些操作会耗费资源。所以频繁的创建启动、销毁线程,会耗费操作系统较多资源。开发过程中,合理地使用线程池有2个好处: 1.降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 2.提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源, 还会降低系统的稳定性,使用
2021-11-30 21:43:53 401
原创 深入理解ThreadLocal及源码解析
ThreadLocal是什么 要理解ThreadLocal是什么,会涉及到3个类:Thread、ThreadLocalMap、ThreadLocal。在我们常用的线程Thread类中,有定义一个变量: ThreadLocal.ThreadLocalMap threadLocals = null; ThreadLocalMap类是定义在ThreadLocal类中的内部类,我们通过操作ThreadLocal类中的set()、get()等方法,可以在线程生命周期内向这个map变量设置、获取值。 Thre
2021-11-25 19:06:20 210
原创 HashMap之环形链表源码图解
HashMap之环形链表源码图解1.扩容逻辑实现transfer()方法:2.扩容前的HashMap数据:3.线程一开始扩容,注意这句关键代码:4.巧了,此时线程二也开始触发扩容: Java7在多线程操作HashMap时,并发扩容可能会导致环形链表,get方法时则可能出现死循环。以下是环形链表的具体产生过程。 1.扩容逻辑实现transfer()方法: void transfer(Entry[] newTable, boolean rehash) { int newCapacity = newTab
2021-11-14 21:46:57 846
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人