Java集合框架源码分析 接口单列集合接口 java.lang.Iterable java.util.Collection java.util.List java.util.Set java.util.SortedSet java.util.NavigableSet java.util.Queue java.util.Deque 双列集合接口 java.util.Map java.util.Sorte 2019-07-12 目录 #JAVA #源码
Java中的锁-AbstractQueuedSynchronizer队列同步器 AbstractQueuedSynchronizer 同步器提供了一个框架,用于构建 先进先出(FIFO) 等待队列的 阻塞锁 和 相关同步器(信号量,事件等)。它使用了一个 int 成员变量表示同步状态,通过 FIFO 队列来完成资源获取线程的排队工作。 一、同步器的使用 同步器的主要使用方式是 继承,子类通过继承同步器并实现它的抽象方法来管理同步状态。 使用同步器提供的3个方法:**getSt 2019-07-10 多线程 #JAVA #多线程 #LOCK
Java中的锁(Lock接口) 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,如:读写锁)。 在Lock接口出现之前,Java程序依靠 synchronized 关键字实现锁的功能。 Java1.5之后,并发包中新增了 Lock 接口(以及相关实现类)用来实现锁功能,它提供了与 synchronized 关键字类似的同步功能,只是使用时需要 2019-07-09 多线程 #JAVA #多线程 #LOCK
Java内存模型四(volatile内存语义) 1、volatile的特性 可见性:对一个 volatile 变量的读,总是能看到(任意线程)对这个 volatile 变量最后的写入。 原子性:对任意单个 volatile 变量的读/写具有原子性,但类似于 volatile++ 这种复合操作不具有原子性。 2、volatile写-读建立的happens-before关系从 JSR-133 开始(JDK5),volatile 变量的写 2019-05-30 多线程 #JAVA #多线程 #JMM
Java内存模型三(顺序一致性) 顺序一致性内存模型 是一个理论参考模型。处理器的内存模型 和 编程语言的内存模型 都会以其作为参考。 1、数据竞争与顺序一致性Java内存模型规范对 数据竞争 的定义: 在一个线程中写一个变量 在另一个线程读同一个变量 而且写和读没有通过同步来排序 2019-05-29 多线程 #JAVA #多线程 #JMM
Java内存模型二(重排序) 重排序:指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。 1、数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。 数据依赖性分为下列3种: 2019-05-27 多线程 #JAVA #多线程 #JMM
Java内存模型一(基础) Java内存模型的基础:主要介绍内存模型相关的基本概念 Java内存模型中的顺序一致性:主要介绍 重排序 与 顺序一致性内存模型 同步原语:主要介绍3个同步原语 (synchronized、volatile、final) 的内存语义及重排序规则在处理器中的实现 Java内存模型的设计:主要介绍Java内存模型的设计原理,及其余处理器内存模型和顺序一致性内存模型的关系 1、并发编程模型的两个关键 2019-05-22 多线程 #JAVA #多线程 #JMM
Java并发机制的底层实现原理(原子操作) 原子操作:不可被中断的一个或一系列操作。 一、处理器如何实现原子操作使用总线锁保证原子性第一个机制是通过总线锁保证原子性。如果多个处理器同时对共享变量进行读改写操作(i++就是经典的读改写操作),那么共享变量就会被多个处理器同时进行操作,这样的操作就不是原子的。 要想保证读改写共享变量的操作是原子的,就必须保证CPU1读改写共享变量的时候,CPU2不能操作缓存了该共享变量内存地址的缓存。 处理器使 2019-04-01 多线程 #JAVA #多线程
Java并发机制的底层实现原理(synchronized) synchronized 一般称之为重量级锁,在Java1.6中对 synchronized 进行了各种优化,在有些情况下它并不那么重了。 利用synchronized实现同步的基础在Java中每一个对象都可以作为锁。具体有以下3中形式: 对于普通同步方法,锁是当前实例对象。 对于静态同步方法,锁是当前类的 Class 对象。 对于同步方法块,锁是 synchronized 括号里配置的对象。 2019-03-21 多线程 #JAVA #多线程
Java对象头详解 由于Java面向对象的思想,在JVM中需要大量存储对象,存储时为了实现一些额外的功能,需要在对象中添加一些标记字段用于增强对象功能,这些标记字段组成了对象头。 1.对象头形式JVM中对象头的方式有以下两种(以32位JVM为例): 1.1.普通对象 |--------------------------------------------| | Object Header (64 2019-03-15 JVM #JAVA #JVM