个人简介

Echo Blog


江湖无名 安心练剑
  • Java Concurrency-09-synchronized
    synchronized 问题 synchronized锁住的是代码还是对象。 答案是: synchronized 锁住的是括号里的对象,而不是代码。 对于非 static 的 synchronized 方法,锁的就是对象本身也就是 this。 验证 案例 1 SyncDemo.java public class SyncDemo { public syn...
    2018-07-25 07:34:17 | Java
  • Java Concurrency-09-synchronized 源码解析
    通过openjdk源码分析ObjectMonitor底层实现 Hotspot JDK只是部分开源,将底层的调用C++的native方法的具体实现屏蔽了,而openjdk则将这部分也开源了,接下来我们通过openjdk源码分析ObjectMonitor底层实现。 openjdk 的官方地址为: https://openjdk.java.net/ 源码地址: https://hg.open...
    2018-07-25 07:34:17 | Java
  • Java Concurrency-09-synchronized 背后的锁 objectMonitor 介绍s
    一、前言 synchronized保证线程同步的作用相信大家都已经非常熟悉了,可以把任意一个对象当作锁。 synchronized 关键字无论是修饰代码块,还是修饰实例方法和静态方法,本质上都是作用于对象上。 当用 synchronized 修饰代码块时,编译后的字节码会有 monitorenter 和 monitorexit 指令,分别对应的是获得锁和解锁。 当用 synchron...
    2018-07-25 07:34:17 | Java
  • Java Concurrency-08-reentrant lock
    锁是否可重入 锁分为可重入锁和不可重入锁。 可重入和不可重入的概念是这样的:当一个线程获得了当前实例的锁,并进入方法A,这个线程在没有释放这把锁的时候,能否再次进入方法A呢? 可重入锁 可以再次进入方法A,就是说在释放锁前此线程可以再次进入方法A(方法A递归)。 不可重入锁(自旋锁) 不可以再次进入方法A,也就是说获得锁进入方法A是此线程在释放锁钱唯一的一次进入方...
    2018-07-25 07:34:17 | Java
  • Java Concurrency-07-class object lock
    Object level Locking vs. Class level Locking 同步是指多线程。同步代码块一次只能由一个线程执行。 Java支持执行多个线程。这可能导致两个或多个线程访问相同的字段或对象。同步是使执行中的所有并发线程保持同步的进程。 同步避免了由于共享内存视图不一致而导致的内存一致性错误。 当一个方法被声明为同步(synchronized)时; 如果另一个...
    2018-07-25 06:44:36 | Java
  • Java Concurrency-06-深入浅出 CAS 算法
    为什么学习 CAS? java 5 中最好的增加之一是在类中支持的原子操作,比如 AtomicInteger、AtomicLong 等等,这些类内部依赖于一个名为CAS的算法(比较和交换)。 CAS 与 java 关键字 volatile 结合,是实现乐观锁的常见方式。 在本文中,我们将一起深入浅出地学习 CAS 算法。 CAS 思想 CAS的思想很简单:三个参数,一个当前内存...
    2018-07-24 08:11:28 | Java
  • Java Concurrency-05-lock intro
    序言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。 本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。 Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。 下面给出本文内容的总体分类目录: ...
    2018-07-24 08:11:28 | Java
  • Java Concurrency-04-Concurrency vs Parallelism
    Concurrency vs Parallelism 并发性意味着在没有特定顺序的情况下,在重叠的时间段内开始、运行和完成多个任务。 并行性指的是多个任务或某一特定任务的多个部分同时运行,例如在多核处理器上。 记住,并发和并行不是一回事。 Concurrency 当我们讨论至少两个或多个任务时,并发性基本上是适用的。 当一个应用程序可以同时执行两个任务时,我们称之为并发应用程序。...
    2018-07-24 08:11:28 | Java