![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java知识
文章平均质量分 72
分享Java锁,Java线程,JDK源码
buzhbuzh
这个作者很懒,什么都没留下…
展开
-
【redis】redis的架构
一文件事件处理器 二 redisIO多路复用 2.1 IO类型 同步阻塞: 调用方阻塞在缓冲区中 同步非阻塞(IO多路复用): 查询缓冲区是否有数据,如果没有数据,直接返回。 异步非阻塞: 缓冲区如果有数据,会调用调用方留下的接口通知调用方。 select函数 在Linux中,我们可以使用select函数实现I/O端口的复用,传递给select函数的参数会告诉内核: 我们所关心的文件描述符 对于每一个文件描述符,我们所关心的状态 我们要等待多长时间 从select函数返回后,内核告诉我们下面信息原创 2022-04-17 19:39:48 · 756 阅读 · 1 评论 -
JDK8中的HashMap
一 二叉树 1.1 二叉查找树(BST) 二叉查找树是一种支持数据快速查找的数据结构,结构如下图 查询的效率为O(lgn),但是在极端情况下查询的效率会退化为O(n),如下图所示,二叉查找树已经退化为了链表 1.2 红黑树 二叉查找树存在不平衡的问题,学者提出通过树节点的自动旋转和调整,让二叉树始终保持基本平衡的状态,就能保持二叉查找树的最佳查找性能了 红黑树,这是一颗会自动调整树形态的树结构,比如当二叉树处于一个不平衡状态时,红黑树就会自动左旋右旋节点以及节点变色,调整树的形态,使其保持基本的平衡状态原创 2020-10-12 00:49:03 · 165 阅读 · 0 评论 -
MySQL中的锁事
一 并发带来的问题 脏读 一个事物A读取到了一个事物B没有提交的数据 不可重复读 一个事物读取一个数据,过一个时间段后再读取这个数据,发现读取的数据的值发生了变化 幻读 一个事物按照相同的数据查询,读取到被另一个事物写入满足条件的数据到数据库中的数据 二 事物的隔离级别 读未提交 读已提交 可重复读 串行化 三 事物的隔离级别的实现 数据库事物的隔离级别的实现,分为两类 加锁:读取数据之前,对其加上锁,防止另外数据读取 MVCC: 不加任何锁,采用多版本并发控制 3.1 数据库锁 3.1.1 数原创 2020-06-29 08:58:05 · 143 阅读 · 0 评论 -
MySQL锁分析之可重复读级别
一 可重复读和可已提交的隔离级别区别 可重复读最主要的是解决了幻读的问题,幻读的解决是使用的GAP锁 二 锁分析的主要内容 2.1 使用主键进行等值查询 (1)使用SELECT … LOCK IN SHARE MODE来为记录加锁 SELECT * FROM hero WHERE number = 8 LOCK IN SHARE MODE; 主键具有唯一性质,所以不存在幻读的问题,所以只需要添加一个行锁就行 如果需要查询主键不存在的记录,比如说 SELECT * FROM hero WHERE numbe转载 2020-06-26 00:43:54 · 1395 阅读 · 0 评论 -
Java中的线程安全
当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的 一 线程安全的实现方法 互斥同步 互斥同步(Mutual Exclusion & Synchronization)是一种最常见也是最主要的并发正确性保障手段。同步是指在多个线程并发访问共享数据时,保证共享数据在同一个时刻只被一条(或者是一些,当使用信号量的时候)线程使用. 在Java里面,最基原创 2020-06-17 01:39:26 · 160 阅读 · 0 评论 -
Java内存模型
一 Java内存模型 Java内存模型是为了让Java程序在各个平台下都可以达到一致的内存访问效果,之前的c语言和c++语言直接使用物理硬件和操作系统的内存模型,可能会导致程序在一套平台上并发正常,在另一个平台上并发异常 1.1 主内存和工作内存 Java规定了全部线程共享的变量存放在主内存中,但是Java线程都有一个工作内存,线程对变量的操作都必须在工作内存中执行 1.2 内存之间的交互操作 Java规定了从工作内存到主内存的操作流程,一共有8个操作,每一个操作都是原子性的 lock(锁定) 作用在主原创 2020-06-16 08:42:18 · 188 阅读 · 0 评论 -
JVM中类的加载机制
一 类加载的时机 一个类被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载,验证,准备,解析,初始化,使用和卸载七个阶段 对类必须进行初始化的几个操作 1.new一个对象或者调用对象的静态方法时候 2.反射调用时候 3.对类初始化的时候,如果父类没有初始化,需要对父类进行初始化 4.定义了JDK8新加入的默认方法,如果有这个接口实现类发生了初始化,那么这个接口需要在其之前被初始化,在一个类进行初始化的时候,要求弗雷 ...原创 2020-06-14 21:52:22 · 70 阅读 · 0 评论 -
JVM基础知识之垃圾回收
一 可达性分析方法 在Java虚拟机中定义了一些不会被回收的对象,叫做GcRoots,从GcRoot中出发,标记可以到达的对象,如果对象可以被标记,这个对象就还是存活的,否则就是需要被回收的 1.1GCRoots的分类 虚拟机栈中的对象 本地方法栈中的对象 方法区中常量引用的对象 方法区中静态属性引用的对象 被同步锁持有的对象 临时性加入的对象 1.2 引用的分类 强引用: 被new出来的对象,在内存不够的时候也不会被回收,而是抛出异常 软引用: 一些有用但是非必须的对象,在内存不够的时候会把这些对象放入到原创 2020-06-11 08:51:01 · 144 阅读 · 0 评论