摘要: 网上对于此类的文章已经十分饱和了,那还写的原因很简单——作为自己的理解笔记。 前言 ​ 此篇文章作为自己学习 的一些个人理解,使用的引擎是 。首先先讲讲 事务 的概念,在 中其对 事务 的描述是这样的: 事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该 阅读全文
posted @ 2020-02-07 17:32 张小云的博客 阅读(552) 评论(0) 推荐(1) 编辑
摘要: AQS是JUC包中许多类的实现根基,这篇文章基于个人理解的前提下完成,所以在结构上跟其他AQS文章有些差异。 1 AQS内脏图 tips:如果只是想看AQS的实现的话可以从第三节开始看,前面只是讲结构和使用 1.1 整体结构 在开始了解 之前,先看下 的内部结构,这样在看实现代码的时候至少有一个整体 阅读全文
posted @ 2019-12-10 21:12 张小云的博客 阅读(2468) 评论(8) 推荐(4) 编辑
摘要: 1 为何要适用线程池 首先我们知道线程对于操作系统来说是一种 珍贵的资源 ,像我们如果每次使用到的时候手动创建,线程执行完 方法后又自动关闭,下次用的时候还得手动创建,这样无论对于操作系统还是我们来说都是一种 时间 和 资源 的浪费,所以我们可以选择维护一些线程,这些线程在执行完任务之后继续执行其他 阅读全文
posted @ 2019-12-02 22:58 张小云的博客 阅读(626) 评论(0) 推荐(2) 编辑
摘要: 1 先谈Finalize() finalize()能做的所有工作,使用try-finally或者其他方式都可以做得更好、更及时,所以笔者建议大家完全可以忘掉Java语言中有这个方法的存在。 ——《深入理解JVM》 finalize()方法确实可以实现一次对象的自救,但是其不确定性和昂贵的运行代价都表 阅读全文
posted @ 2019-11-08 22:41 张小云的博客 阅读(704) 评论(0) 推荐(0) 编辑
摘要: 1、Dead Or Alive 我们都知道对象死亡的时候需要进行垃圾回收来回收这些对象从而释放空间,那么什么样的对象算是死亡呢,有哪些方法可以找出内存中的死亡对象呢?一般来说,我们可以这样认为:如果内存中不存在对当前对象的引用,则此对象一定是死亡状态;但是死亡状态的对象并不一定没有其他对象进行引用( 阅读全文
posted @ 2019-11-05 23:18 张小云的博客 阅读(2178) 评论(4) 推荐(1) 编辑
摘要: 线程封闭 在多线程的环境中,我们经常使用锁来保证线程的安全,但是对于每个线程都要用的资源使用锁的话那么程序执行的效率就会受到影响,这个时候可以把这些资源变成线程封闭的形式。 1、栈封闭 所谓的栈封闭其实就是使用局部变量存放资源,我们知道局部变量在内存中是存放在虚拟机栈中,而栈又是每个线程私有独立的, 阅读全文
posted @ 2019-10-22 22:29 张小云的博客 阅读(1493) 评论(0) 推荐(0) 编辑
摘要: 1、线程状态及切换 Java中的线程有六种状态,使用线程Thread内的枚举类来实现,如下,我对每个状态都进行了一定的解释。 public enum State { /** 表示一个线程还没启用(即未调用start方法)*/ NEW, /** * JVM中执行的线程都是处于这个状态的,但是处于这个状 阅读全文
posted @ 2019-10-17 23:37 张小云的博客 阅读(14808) 评论(0) 推荐(1) 编辑
摘要: 1. 指令重排序 指令重排序分为三种,分别为编译器优化重排序、指令级并行重排序、内存系统重排序。如图所示,后面两种为处理器级别(即为硬件层面)。 编译器优化重排序:编译器在不改变程序执行结果的情况下,为了提升效率,对指令进行乱序的编译。例如在代码中A操作需要获取其他资源而进入等待的状态,而A操作后面 阅读全文
posted @ 2019-10-15 21:43 张小云的博客 阅读(2433) 评论(0) 推荐(4) 编辑
摘要: 本文的内存模型只写虚拟机内存模型,物理机的不予描述。 一、先谈Java的运行时区域(非内存模型) 在Java(1.8版本之前,更准确的是1.7版本之前,因为1.7的时候常量池已经被移到堆中了)中,虚拟机将运行时区域分成6种,如图: 程序计数器:用来记录当前线程执行到哪一步操作。在多线程轮换的模式中, 阅读全文
posted @ 2019-10-09 23:24 张小云的博客 阅读(1268) 评论(0) 推荐(1) 编辑
摘要: 1. 为何要分布式锁 现在假设一个场景,同时有十个请求需要对资源进行访问和修改,为了保证数据的正确性,那么你的程序可能是这么写的: /** 用于锁的对象*/ public static final Object lock = new Object(); ​ /** 模拟业务的资源*/ public 阅读全文
posted @ 2019-09-10 10:32 张小云的博客 阅读(1714) 评论(0) 推荐(1) 编辑