`
春花秋月何时了
  • 浏览: 41976 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论
文章列表
引言及简介 前面我们介绍了独占锁ReentrantLock实现的一个同步辅助工具CyclicBarrier, 它能够使一组线程互相等待,今天我们介绍另一种同步辅助器CountDownLatch,它其实可以看着是利用共享锁实现的,只不过它没有使用到类似共享 ...
前言 前面我们学习了AQS以及基于AQS实现的Du占锁ReentrantLock和基于ReentrantLock实现的同步辅助工具CyclicBarrier,本节我们学习JDK提供的另一个类Semaphore。Semaphore翻译过来就是“信号量”,JDK提供的这个Semaphore被称之为计数信号量。根据Java Doc的描述,Semaphore维护一个许可集或者一些资源,然后可以限制同时访问这一组许可(也可以称作资源)的线程数量。   在本质上,其实我们可以将Semaphore理解为一个“共享锁”,而当Semaphore所维护的许可集或者共享资源只有唯一的一个的时候,它就从“共享 ...
引言及简介 上一章我们介绍了独占式的同步组件ReentrantLock,今天我们先不忙着继续介绍其他Lock接口的实现类同步组件,先来看看JDK基于ReentrantLock同步组件以及Condition条件等待机制实现的一个同步辅助器CyclicBarrier。   CyclicBa ...
前言 ReentrantLock作为Java并发包显示锁的典型实现,又被称作可重入的独占锁,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁定相同的一些基本行为和语义,等同于synchronized的使用,但是ReentrantLock提供了比synchronized更强大、灵活的锁机制,可以减少死锁发生的概率。 因为ReentrantLock是直接实现Lock接口的显示锁,所以它不但实现了阻塞式获取同步锁的方法,而且还实现了非阻塞的、响应超时或中断获取同步锁的功能,跟进一步的是,ReentrantLock还实现了对公平锁(FairSync)和非公平锁(Nonfai ...
引言 终于走到这一步,在JDK5之前,Java都是通过synchronized关键字实现同步锁功能的,通过前面对synchronized关键字的阐述,相信我们已经非常了解了其特性,它是为了保证在多线程并发下对共享资源的访问的线程安全。从JDK5开始 ...
一、引言 在上一章的AQS同步阻塞与唤醒源码分析中,我们知道作为同步组件的基础核心框架AQS(AbstractQueuedSynchronizer), 其内部层次结构分为三部分,第一部分是AbstractQueuedSynchronizer类本身,第二部分是实现同步队列节点的静态内部类Node,第三部分是内部类ConditionObject。其中AbstractQueuedSynchronizer类自身的大部分 + 静态内部类Node实现了相当于Lock锁的获取与释放操作,Node被实现为AQS内部维护的同步等待队列的节点。关于AQS是如何实现Lock语义的锁的获取与释放操作,以及如何维护 ...
本文承接未完上文。 四、AQS共享获取/释放源码分析  在上文中对Du占方式获取和释放共享资源相关的源码进行了分析,本节接着开始对共享式获取/释放资源的源码进行分析。共享式与Du占式的最主要区别在于同一时刻Du占式只 ...
一、引言 AQS,是AbstractQueuedSynchronizer的简称,它是Java5构建锁或者其他同步组件的基础核心框架,是理解整个Java并发包最关键的类,没有之一。同时,AQS解决了实现同步器时的大量细节问题,例如同步状态的基本操作、FIFO同步 ...
前言 LockSupport 和 CAS 是Java并发包中很多并发工具控制机制(Lock和同步器框架的核心 AQS: AbstractQueuedSynchronizer)的基础,它们底层其实都是依赖Unsafe实现。 LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。其主要的核 ...
前言          一直以来,Java作为一门高级语言给人的印象是程序员不需要也没有办法直接对内存进行操作,其实Unsafe类就是Java中可以直接操作内存的工具,它属于sun.* 路径下的API,而不属于J2EE的一部分。          需要说明的是:直接操作内存是很危险的一件事,并且Unsafe是一个平台相关的类,它操作的更是直接内存,所以不能通过Java虚拟机的垃圾回收机制进行内存释放,在使用的时候需要注意内存泄漏和溢出,在实际开发中建议不要直接使用。接下来,我们就Unsafe类中比较重要或者在Java并发包中会使用到的方法进行一个探究,以备将来学习Java并发包的时候更加 ...
引言         前面使用了大量的章节对线程、Java内存模型、synchronized锁等进行了详细的介绍,同时也清楚了其实大部分的内容都是在围绕着并发过程中的原子性、可见性和有序性进行探讨,除了synchronized这样的隐式锁,前文还提到Lock对象支持的显式锁同样能够对这三大特征进行支持。从本章节开始,我们将致力于对Lock对象显式锁的探讨。         Lock对象显式锁其实是Java并发包(java.util.concurrent)中的重要内容,它是J2EE5.0之后才引入的。其相对于synchronized隐式锁更加强大与灵活,并且对锁的操作花费的代价更低。要想在 ...
        介绍完Java内存模型的相关操作与规则,会发现其主要就是围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的,这也是并发编程最核心的核心概念。 可见性         可见性是指在并发环境下,当一个线程修改了共享变量的值,其他线程能够立即得知这个修改。 在多核处理器的架构中,由于CPU缓存的存在,当某一核心修改了共享变量的值,并不一定会立即刷新回主内存,而且就算立即刷新回了主内存,其他同样使用该共享变量的线程也不一定会立刻感知到其数据的变化从而重新从主内存加载共享变量。 在Java中,有如下几种手段可以保证并发可见性(其实说到底最底层都是通过设置内存屏障 ...
术语 在上一文关于synchronized锁机制的探寻中,我们知道在那些锁机制的底层实现中或多或少的都借助了CAS操作,其实Java中java.util.concurrent包的实现也是差不多建立在CAS之上,可见CAS在Java同步领域的重要性。   CAS是Compare and Sw ...
本文承接未完待续的 Java内存模型JMM之六深入理解synchronized(1) 3.7 锁消除 消除同步锁是JVM另外一种锁的优化,这种优化更彻底, JVM通过运行时JIT编译(可以理解为当某段代码即将第一次被执行时进行编译,又称即时编译),对 ...
一、互斥同步 在前面我们了解了什么是线程安全与synchronized的基本应用,那么如何才能实现线程安全?互斥同步是最常见的一种并发线程安全保障手段,同步是指在多个线程并发访问共享数据时,保证共享数据在同一时刻只被 ...
Global site tag (gtag.js) - Google Analytics