java基础
oZaCao1
这个作者很懒,什么都没留下…
展开
-
Synchronized 锁升级
Synchronized是JAVA锁的一种形式,是基于JVM层面进行实现。主要有两种用法修饰方法 在实现时,class文件有特殊标识符ACC_SYNCHRONIZED作用于同步方法 修饰代码块 在实现时,class文件会有两条指令monitorenter及monitorexit,作用于代码块之间 在jdk6之后Synchrozied 升级了,具有多种锁的形式,偏向锁,轻量级锁,自...原创 2019-05-11 21:54:24 · 556 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码解析
AQS是什么呢??我认为AQS是一个同步的辅助工具,当出现对公共资源的竞争时,AQS维持了一个双向队列,用于存储获取资源的线程对象。AQS封装了许多基础的方法,如等待超时,线程中断处理等。下面的一张图是对AQS主要功能的一个较好诠释。state代表的是公共资源,位于head的线程表示获得资源所有权,队列后面的线程处于阻塞状态。AQS 支持两种模式下来的资源获取,独占模式及共享模式...原创 2019-05-10 21:36:33 · 269 阅读 · 0 评论 -
深入剖析ThreadLocal
ThreadLocal 是什么?ThreadLocal 是一个线程的工具类,主要用于存储一些线程的共享变量,各个线程之间互不影响,在多线程及高并发环境下,可以实现无状态的存储及调用ThreadLocal的原理好久以前。我一直以为ThreadLocal 可能就是一个Map,以Thead ID为key,然后往里面设置Value即可,但实际上JDK里的ThreadLocal 却没有这样子实现...原创 2019-04-14 18:45:44 · 254 阅读 · 0 评论 -
FutureTask源码解读
一篇纯粹解读FutureTask的文章public class FutureTask<V> implements RunnableFuture<V> { /** * FutureTask的状态 从NEW-->COMPLETEING-->NORMAL */ private volatile int state...原创 2019-04-21 22:58:55 · 126 阅读 · 0 评论 -
ThreadPoolExecutor源码解读
ThreadPoolExecuor是JDK中默认线程池的实现。下面我们对其进入深入剖析。首先来一张类图其继承关系还是很清晰明了的,下面从Executor说起,Executor 这个接口只是定义了一个方法executor(Runnable r),用于向线程池提交一个任务。注意到一点这个方法的返回值还是空的。public interface Executor { void ex...原创 2019-04-21 21:30:29 · 113 阅读 · 0 评论 -
JAVA锁机制的总结
锁的分类 主要分类包括乐观锁及悲观锁;从另一个角度来说也可以分为公平锁及非公平锁,synchronized机制的锁是非公平锁,这一点是从竞争机制来说,对某个锁的获得不是先到先得,有可能后来者居上(自璇锁)。锁的实现机制JAVA中锁机制的实现主要有两种,一种是基于JVM层面的synchronized 另一种是基于JAVA语言层面的Lock。synchronized的实现...原创 2019-05-11 22:00:43 · 936 阅读 · 0 评论 -
happen-before 原则详解
1.happen-before 原则是什么?happen-before 原则是作为java 内存模型(JMM)的一部分。它规定了若A操作happen-befroe B操作,那么A操作对与B操作来说是可见的。JVM在实现的时候就确保了是能够满足happen-before 原则的。2.为什么会出现happen-before 原则?java 存在线程工作内存及主内存(多核cpu及多级缓存导致...原创 2019-05-26 11:53:02 · 1891 阅读 · 0 评论