![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
基础知识
一个好人-leo
腾云驾雾靠大数
展开
-
ThreadPoolExecutor-线程池的理解
1.再说线程池之前先了解下线程、用户级线程、内核级线程概念线程可以通过继承Thread,实现Runnable接口以及实现Callable接口来创建线程,它是比进程更小执行单位。 线程的生命周期和状态 用户级线程: 用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态/核心态切换,...原创 2019-11-18 10:25:46 · 323 阅读 · 0 评论 -
ThreadLocal理解
1.ThreadLocal的类层级结构2.ThreadLocal作用ThreadLocal修饰的变量:使得每个线程都拥有该变量的本地副本。(你有你的,我有我的,你修改你的并不会影响我的变量的值)3.ThreadLocal使用场景适用于高并发场景下,各个线程通过不同变量值完成操作的场景。4.源码解析set(T value) get() remove()...原创 2019-11-12 18:09:35 · 271 阅读 · 0 评论 -
volatile关键字理解
1.JMM层面 每个线程从主内存中读取数据,读入自己的本地工作内存进行相应的修改,每个线程的本地工作内存相互独立的。因此这就可能造成一个线程读取内存的数据进行的相应的修改,但是没有及时的写入内存,造成其他线程读取到过时的数据,因此有数据不一致性问题。为了解决这个问题,我们可以使用volatile来定义该变量。2.特性可见性:一个线程修改了全局变量的值以后,其他线程也可见。实现机制是通...原创 2019-11-11 10:53:36 · 230 阅读 · 0 评论 -
Java关键字-synchronized理解
1.作用及版本多线程环境下用来控制资源同步访问的,同步控制的代码块是原子操作。 JDK1.6以前的synchronized是一把重量级锁,监视器锁(monitor),当一个线程获取到锁之后,其他线程想要获取锁就必须等待,也就是其他线程是阻塞状态(Blocked)。当前线程获取到锁执行完之后释放锁,这时阻塞队列里面的线程会去竞争锁,竞争到锁的线程又继续执行。由于这个时候发生了线程切换,因此...原创 2019-11-08 17:28:07 · 174 阅读 · 0 评论 -
JDK1.8-ArrayList-add/get/remove 源码流程解析
1.add(E e)2.get(int index)3.remove(Object o)4.安全性:ArrayList由于没有加同步和任何的锁机制,因此不是线程安全的。可能出现数组越界或者脏读等问题。想要线程安全可以使用Vector。5. remove(Object o)和remove(int index)区别:remove(Object o)返回true/fals...原创 2019-11-07 15:55:18 · 248 阅读 · 0 评论 -
JDK1.8-HashMap get/remove 操作流程解析
1. get(Object key)注意:如果Node数组不空的话,它每次都会去取数组第一个元素,看该元素的key以及key生成的hashCode值是否和传过去的Object key以及key生成的hash值是否分别对应相等,如果是的话,直接返回Node数组第一个元素,返回其value值。否则根据上图往下走。2.remove(Object key)...原创 2019-11-04 22:13:02 · 335 阅读 · 0 评论 -
JDK1.8-HashMap-Put操作源码流程解析
1.Put 操作流程图2.当put操作发生hash冲突的时候,会用拉链法解决冲突。但是如果在同一内存地址冲突的数据超过8个时,并且这个时候Node数组的容量大于等于64,那么这个时候再在该位置添加元素会把单链表变成双向链表最后再转换成红黑树来进行存储数据。采用红黑树存储数据目的是在该冲突的地址查询数据的时候能够更快,提高查询效率。存储结构转换图:3.红黑树为了保证其特定,在插入元...原创 2019-11-03 21:51:37 · 747 阅读 · 0 评论 -
重写equals为何要重写hashCode方法
参考:https://blog.csdn.net/We_chuan/article/details/96426273转载 2019-07-30 15:22:10 · 105 阅读 · 0 评论