![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 58
首席菜鸟
学习然后成长,那真快乐不过了
展开
-
Lock接口基本实现原理
在Lock接口的实现里面,有个比较有名的叫ReentrantLock,它的实现机制是靠其内部类Sync,而这个类是AbstractQueuedSynchronizer(AQS)的子类。这个类的主要功能是通过管理一个双向同步队列(FIFO)实现同步状态的管理,实现多线程对同步状态的访问安全。在同步队列种存储的数据结构是一个个的节点Node,其中包含了跟双向链表类似的前向节点和后续节点...原创 2018-04-08 10:52:48 · 925 阅读 · 0 评论 -
关于Java平台的一些理解(虚拟机执行引擎)
首先是java平台的两个特点:1.一次编译,到处运行 :JVM帮助开发者屏蔽了操作系统层面上的细节,跨平台不需要重新编译 2.自动垃圾回收:java的垃圾回收机制 提到JVM不得不说Jre和Jdk,Jre是java的运行时环境,主要包含了JVM和java基础类库,而Jdk是jre的超集,里面包含了一些编译工具和调试分析工具 java的代码执行分为两种,第一种是将源代码编译成字节码文件,...原创 2018-05-15 11:51:20 · 1090 阅读 · 0 评论 -
Java中的线程与锁的一些概念理解
Java中的线程是基于操作系统的原生线程模型来实现的,因此在调度上是取决于操作系统层面。 线程和进程间的区别是在 进程是系统进行资源分配和调度的一个独立单位. 线程则是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 理论上说,并发不一定要...原创 2018-05-06 11:59:04 · 594 阅读 · 0 评论 -
可循环使用的屏障CyclicBarrier(源码分析)
前文有分析了发令枪的原理,这里先总结一下CountDownLatch和CyclicBarrier的区别。 1.发令枪是一次性的,无法重置,循环屏障可重复使用(reset) 2.发令枪是在所有任务都执行结束统一退出的时候使用,循环屏障是还没开始任务前统一步调的时候使用。举个例子,在计算银行的交易总金额是我们需要使用多个线程去计算每个时间段的总金额,如果我们想要得知该银行的一天的总...原创 2018-05-04 14:41:28 · 707 阅读 · 0 评论 -
发令枪CountDownLatch底层原理解析
CountDownLatch是JUC包下比较有名的并发工具,也就是大家熟知的发令枪,类似Lock,借助了AQS队列同步器来完成功能,下面是比较简单的例子: CountDownLatch latch=new CountDownLatch(2); Work worker1=new Work("程序员1", 5000, latch); Work worker2=n...原创 2018-05-03 20:30:06 · 7168 阅读 · 1 评论 -
java里的类加载机制
类的生命周期包括:加载,验证,准备,解析,初始化,卸载,其中验证,准备和解析统称为连接。这5个阶段的顺序是一定的,但是实际上的执行并不是按部就班的,而且通常都是交叉混合式进行的。 比较重要的加载过程触发是有以下几种情况(针对hotspot): 1.在该类的静态部分被引用到的第一次时出发加载 2.子类初始化的时候--构造器(可以理解为构造器包...原创 2018-04-30 13:23:10 · 138 阅读 · 0 评论 -
ArrayDeque的精巧之道
今天在学习深度优先和广度优先遍历树的时候,发现了一个非常牛逼的数据结构,它就是ArrayDeque,这个数据结构既可以当成堆栈使用,又可以当成队列来使用。接下来通过debug一些简单的使用代码来探索一下ArrayDeque的底层实现原理。首先,我的简明测试如下: 在debug的过程中,我发现在ss和ss1的数据组成里面,相同值所在的地址是一样的,类似与String类,这是In...原创 2018-04-05 22:11:59 · 169 阅读 · 0 评论 -
JVM数据区在JDK1.8带来的变化以及GC
前面有介绍过jvm的在jdk1.7的运行时数据区,现在讲讲JDK1.8带来的变化,JDK1.8的运行时数据区把方法区移除了,变成了元数据区,所以之前的那个图里面的数据块应该变成如下: 在jdk1.8之前的版本,我们通常把堆分为新生代,老年代和永久代(方法区)(我们通常认为方法区也是属于堆的),新生代又包含了eden,from和to(survivor),当对象存活了超过...原创 2018-04-01 14:21:10 · 6424 阅读 · 3 评论 -
JVM运行时数据区探索与直接内存的使用
话不多说,先上简图(<JDK1.8):从图中可以看出JVM的运行时数据区大致可以分为数据和指令两块内容,指令这块本质上也属于数据,不过大部分数据跟指令有关系。右边有3个部分都是线程私有的,计数器存储了当前线程执行的字节码指令的地址,不过这仅限于java方法,如果时native方法那这个计数器时为null的。(查看字节码可以在命令行使用javap -v class文件名),而在虚拟机栈里面,一...原创 2018-04-01 11:57:19 · 1206 阅读 · 0 评论 -
java线程的状态+锁分析
在最开始贴出我的线程状态理解简图(没画出结束状态): 相信很多小伙伴对这种图都有或多或少的印象,下面就来分析一下线程的整个可能出现的状态和状态变化出现的原因。我们都知道新建一个线程是很简单的,可以通过继承Thread或者实现Runnable/Callable接口来创建一个新的线程。在调用了start()方法之后该线程就进入了就绪状态,而且在就绪状态只能等待系统调度。在运行中的线程在碰...原创 2018-03-31 16:07:44 · 539 阅读 · 0 评论 -
多线程之volatile关键字
接触过java的小伙伴们都知道,java有很多很好用的关键字,平常我们自己写代码的时候也会经常用到,但是并没有几个人真正了解其中含义和实现原理,今天我就带大家来详细解读一下volatile关键字。 在这之前,我们先来看看现在计算机的硬件内存架构图:早期的计算机并没有缓存这个东西,后来是因为在CPU和内存之间频繁地读取数据效率太慢而增加,其实这里面还隐隐地有二八定理地影子。当CPU核心要...原创 2018-03-31 14:15:39 · 239 阅读 · 0 评论 -
Java的四大特性(封装、继承、抽象、多态)小记
封装:java面向对象的基础,将对象的属性和行为都封装到类中,是现实生活的抽象表达,比较关键的点是分配属性和行为。比如说“人开车”,车与人都是对象,但是车行驶的行为是给车本身而不是人。 优点:模块化、减少耦合、隐藏信息(访问修饰符)继承:避免代码复写和实现功能扩展的基础,需要注意的是:不能继承父类的私有属性和构造 优点:能很好的体现相关类之间的层次结构关系抽象:从多个实...原创 2018-05-15 15:54:30 · 329 阅读 · 0 评论