![](https://img-blog.csdnimg.cn/20210711121330877.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JavaSE
文章平均质量分 93
JavaSE学习笔记
hu_xiang_1995
这个作者很懒,什么都没留下…
展开
-
【JavaSE】HashMap源码分析(jdk8)
概述HashMap本质是一个hash表,采用拉链法解决冲突,并且在某个位置的链表过长时将其转化为一棵二叉搜索树降低插入的开销;按照以下顺序去阅读HashMap的源码是不错的选择构造函数put( )方法remove( )方法get( )方法一、主要成员1.1 成员属性public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Seriali原创 2022-02-18 21:41:38 · 461 阅读 · 0 评论 -
【JUC】Java并发编程学习笔记
一、概述1.为什么jdk中有那么多关于并发的类并发可以理解为多线程同时工作,一般情况下是要比单线程处理速度更快,但是并发也不是在任何情况下都更优,使用多线程并发技术编写的代码在运行时可能会发生线程上下文切换上下文切换指的是内核在CPU上对进程或者线程进行切换,切换过程中需要保存操作数和程序断点等信息,极为耗费时间死锁多个线程相互等待对方释放自己需要的资源,陷入的一种无外力作用,所有线程一直阻塞下去的状态这些问题都会导致并发过程处理速度变慢,jdk的众多并发工具类和框架就是为了原创 2022-02-18 18:52:18 · 316 阅读 · 0 评论 -
【JUC】自定义线程池
概述线程池是基于生产者-消费者模型实现的一种对线程的管理工具,其中维护了"消费者"队列和作为"缓冲区"的任务队列生产者:产生任务的线程,比如客户端的请求消费者:线程池里维护的线程,负责执行任务缓冲区:线程池里维护的任务队列线程池的基本工作过程就是生产者不停的往任务队列中加入任务,消费者队列中的线程不停的从任务队列中取出任务去完成之所以诞生这样一个设计,原因是线程池可以:降低上下文切换开销:任务到来不需要新建线程去执行,而是直接从消费者队列取出一个线程去执行任务,任务结束也不需要销毁线程提原创 2021-11-13 16:20:09 · 363 阅读 · 0 评论 -
【JUC】AQS 队列同步器
一、概述AbstractQueuedSynchronizer(AQS)队列同步器,是用来构建其它同步组件的基础框架,同步组件也是构建各种Lock工具(例如:ReentrantLock)的必备组件例如:下面的自定义锁MyLock的伪代码public class MyLock implements Lock { // 自定义的同步组件 private static class MySync extends AbstractQueuedSynchronizer { //原创 2021-11-11 15:30:18 · 584 阅读 · 0 评论 -
【JUC】synchronized原理
一、概述synchronized是Java中实现线程同步的一种方式,其在JavaSE 1.6之前被称为"重量级锁",之后对其进行了优化在原有重量级锁的基础上诞生了轻量级锁和偏向锁synchronized是借助对象头中的Mark Word与锁相关联完成同步机制,这个锁就是Monitor下面介绍下这些基本概念1.1 Java对象内存布局—Mark WordJava创建对象时会在堆区中开辟一定的空间用来存放对象,一个对象主要包含了以下信息自身运行时的数据:如HashCode、GC分代年龄,锁状态标志原创 2021-11-10 18:08:20 · 303 阅读 · 0 评论 -
【JUC】volatile的原理与应用
一、概述volatile用来修饰变量,可以理解为轻量化的synchronized,其作用是保证变量的可见性顺序一致性但其无法保证原子性二、Java内存模型(JMM)和可见性2.1 JMM在Java虚拟机(JVM)中定义了内存模型(JMM),屏蔽了不同CPU架构和操作系统之间对内存的访问的差异,简单的以下图的方式定义了Java线程和主内存之间的关系从抽象的角度看,JMM确定了线程和主内存之间的通信方式,线程之间的共享变量(比如:static修饰的变量)存储在主内存,每个线程都有独属于自己原创 2021-11-09 19:35:53 · 148 阅读 · 0 评论 -
【JUC】ThreadLocal
ThreadLocal解决线程隔离问题ThreadLocal类可以高效解决线程间数据隔离的问题先看效果:未使用ThreadLocal所有线程在对同一个对象的同一个属性进行读写操作,产生数据冲突public class ThreadLocalDemo { private String var; public String getVar() { return var; } public void setVar(String var) {原创 2021-10-30 16:33:52 · 101 阅读 · 0 评论