- 博客(5)
- 收藏
- 关注
原创 ScheduleThreadPoolExecutor 定时任务线程池原理
ScheduleThreadPoolExecutor 定时任务线程池ScheduleThreadPoolExecutor 定时任务线程池定时任务实现方法实现原理ScheduleFutureTask类run()实现方法DelayedWorkQueue队列ScheduleThreadPoolExecutor 定时任务线程池之前讲到ThreadPoolExecutor,ScheduleThreadPoolExecutor继承自ThreadPoolExecutor,它的主要作用是用于定时任务的的线程池,给定延迟
2021-03-25 21:15:49
1376
原创 线程池ThreadPoolExecutor分析
线程池ThreadPoolExecutor分析线程池线程池介绍Executor框架线程池属性线程池实现原理ThreadPoolExecutor线程池执行任务提交参数解释线程池原理线程池对于线程的介绍在这里就不多赘述了,直接就说说线程池吧。线程池其实就是线程的缓存,线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,因此Java提供线程池对线程进行统一的分配、调优和监控。线程池介绍在Web开发中,服务器接受请求并处理,一般会为每个请求都分配一个线程进行处理,在低并发场景下这种
2021-03-22 22:09:36
404
原创 ConcurrentHashMap的put方法
ConcurrentHashMap的put方法解析ConcurrentHashMap的put方法JDK1.7put实现JDK1.8put实现直接插入新创建表插入插入过程扩容ConcurrentHashMap的put方法本文主要对ConcurrentHashMap的原理进行解析,主要是对比JDK1.7和JDK1.8的不同实现方式。JDK1.7put实现JDK1.7中引入Segment,Segment类通过继承ReentrantLock类,进行加锁,从而控制整个插入过程。Segment数组也是一种数组
2021-03-13 21:58:33
8651
8
原创 HashMap扩容改进分析
HaMap扩容JDK1.8以后对之前版本的HashMap扩容多线程场景下的死锁的问题进行了解决。采用高低位拆分转移方式,避免了链表的产生。resize()方法扩容部分for (int j = 0; j < oldCap; ++j) { Node<K,V> e; if ((e = oldTab[j]) != null) { oldTab[j] = null;
2021-03-10 17:48:44
2562
6
原创 HashMap扩容死锁
HashMap扩容HashMap扩容transfer()函数原Entry数组转移到新Entry数组扩容死锁单线程扩容多线程扩容死锁HashMap扩容HashMap在JDK1.7使用的是数组+链表的方式,而在JDK1.8及以后则使用的是数组+链表+红黑树的方式进行数据存储。本文主要是对JDK1.7中存在的死锁问题进行分析。transfer()函数 /** * Transfers all entries from current table to newTable. */ v
2021-03-10 13:47:23
3065
7
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人