竹杖芒鞋轻胜马

ClassLoader-2 双亲委派模型

上一节ClassLoader-1 类加载器,这一节我们看一下 jvm 中都有哪些类加载器,以及双亲委派模型。 jvm 中的类加载器 jvm 中自带三个类加载器: Bootstrap ClassLoader 最顶层的加载类,主要加载核心类库,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。另外需要注意的是可以通过启动jv...

ClassLoader-1 类加载器

什么是类加载器 Java 中的所有类,必须被装载到 jvm 中才能运行,这个装载工作是由 jvm 中的类装载器完成的,类装载器所做的工作的实质是把类文件从硬盘读到内存中。jvm 在装载类的时候都是通过 ClassLoader 的 loadClass() 方法来加载 class 的。 为了更好的理解类加载机制,我们来深入分析下 ClassLoader 和它的 loadClass() 方法。 ...

Java 并发-10 ThreadLocal

关键词 合理发布 线性探测 内存泄漏 合理发布 Java 线程间通信使用的是共享内存机制。在共享内存并发模型里,线程之间共享程序的公共状态——实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间共享。在这种情况下可能会造成数据的安全性、一致性等问题。 ThreadLocal 的目标是不该共享的变量不被「发布」出去,从而保证数据的安全性。 How ? Threa...

Java 并发-9 Condition

前言 上一节我们学习了 AbstractQueuedSynchronizer ,这一节我们看一下 Condition,Condition 是实现多种并发工具类的基础。 简介 任意一个 Java 对象,都拥有一组监视器方法(定义在 java.lang.Object 上),主要包括 wait()、wait(long timeout)、notify()以及 notifyAll(),这些方法与 S...

Java 并发-8 AbstractQueuedSynchronizer

简介 AbstractQueuedSynchronizer 是用来构建锁或其他同步组建的基础,在整个并发框架中占有非常重要的作用,下面我们来分析下 AbstractQueuedSynchronizer 的源码,看下它的工作原理。 AbstractQueuedSynchronizer 的主要使用方式是继承,子类通过继承 AbstractQueuedSynchronizer 并实现它的抽象方法...

Java 并发-7 final 及其内存语义

前言 对于 final 关键字,想必都不陌生了,本文对其用法以及原理做一个总结。 用法 修饰类 当用 final 去修饰一个类的时候,表示这个类不能被继承。 注意:被 final 修饰的类,类中的成员变量可以根据需要设计成 final。final 类中的成员方法都被隐式的指定为成员方法。 ...

Java 并发-6 Synchronized

Synchronized 一直是 Java 并发编程中不可缺少的一个角色,本文分析下 Synchronized 的基本用法以及原理。 用法 Java 中的每一个对象都可以作为锁,具体表现为以下三种形式: 普通同步方法,锁的是当前实例对象。 静态同步方法,锁的是当前类的class 对象。 同步方法块,锁的是括号里面的对象。 Java 对象头与 Monitor 先来看一下 ...

Java 并发-5 Volatile

简介 在多线程并发编程中 synchronized 和 volatile 都扮演着重要的角色,volatile 是轻量级的 synchronized,它在多处理器并发中保证了共享变量的‘可见性’。可见性意味着当一个线程修改共享变量时,另一个线程能读到这个变量的值。如果 volatile 修饰符使用恰当,它的使用成本将比 synchronized 更低,因为它不会引起上下文的切换和调度。 V...

Java 并发-4 Java 内存模型

Java 内存模型的抽象结构 在 Java 中,所有实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间共享。局部变量、方法定义参数、和异常处理参数不会在线程间共享,它们不会有内存可见性问题,也不会受内存模型的影响。 Java 线程之间的通信由 Java 内存模型(JMM)控制,JMM 决定一个线程堆共享变量的写入何时对另一个线程可见。从抽象的角度看,JMM 定义了线程和主内存之间...

Java 并发-3 物理计算机的并发问题

在了解 Java 内存模型之前,我们先看下物理计算机中的并发问题。物理机中遇到的并发问题与虚拟机中遇到的问题有不少相似之处,物理机中对并发的解决方案对虚拟机有很大的参考意义。 硬件的效率与一致性 “让计算机并行执行多个任务”与提高计算机的运算效率并不像看上去那么顺理成章。大多数的计算任务都不可能只靠“运算”来完成,计算机至少要跟内存交互,执行 I/O 是计算机必不可少的一个操作。 计算...