Java多线程系列--“JUC锁”11之 Semaphore信号量的原理和示例
摘要:概要本章,我们对JUC包中的信号量Semaphore进行学习。内容包括:Semaphore简介Semaphore数据结构Semaphore源码分析(基于JDK1.7.0_40)Semaphore示例转载请注明出处:http://www.cnblogs.com/skywang12345/p/3534050.htmlSemaphore简介Semaphore是一个计数信号量,它的本质是一个"共享锁"。信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过
阅读全文
Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例
摘要:概要本章介绍JUC包中的CyclicBarrier锁。内容包括:CyclicBarrier简介CyclicBarrier数据结构CyclicBarrier源码分析(基于JDK1.7.0_40)CyclicBarrier示例转载请注明出处:http://www.cnblogs.com/skywang12345/p/3533995.htmlCyclicBarrier简介CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。注意比较C
阅读全文
Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例
摘要:概要前面对"独占锁"和"共享锁"有了个大致的了解;本章,我们对CountDownLatch进行学习。和ReadWriteLock.ReadLock一样,CountDownLatch的本质也是一个"共享锁"。本章的内容包括:CountDownLatch简介CountDownLatch数据结构CountDownLatch源码分析(基于JDK1.7.0_40)CountDownLatch示例转载请注明出处:http://www.cnblogs.com/skywang12345/p/3533887.htmlCountDownLatch简介Co
阅读全文
Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
摘要:概要Java的JUC(java.util.concurrent)包中的锁包括"独占锁"和"共享锁"。在“Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock ”中,对Java的独占锁进行了说明。本章对Java的“共享锁”进行介绍,JUC中的共享锁有CountDownLatch, CyclicBarrier, Semaphore, ReentrantReadWriteLock等;本章会以ReentrantReadWriteLock为蓝本对共享锁进行说明。内容包括:ReadWriteLock 和 ReentrantReadWriteLo
阅读全文
Java多线程系列--“JUC锁”07之 LockSupport
摘要:概述本章介绍JUC(java.util.concurrent)包中的LockSupport。内容包括:LockSupport介绍LockSupport函数列表LockSupport参考代码(基于JDK1.7.0_40)LockSupport示例 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3505784.htmlLockSupport介绍LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。 LockSupport中的park() 和 unpark() 的作用分别是阻塞线程和解除阻塞线程,而且park()和unpark()不会遇到“T
阅读全文
Java多线程系列--“JUC锁”06之 Condition条件
摘要:概要前面对JUC包中的锁的原理进行了介绍,本章会JUC中对与锁经常配合使用的Condition进行介绍,内容包括:Condition介绍Condition函数列表Condition示例转载请注明出处:http://www.cnblogs.com/skywang12345/p/3496716.htmlCondition介绍Condition的作用是对锁进行更精确的控制。Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当于Object的notify()方法,Condition中的signalAll()相当于Object的no
阅读全文
Java多线程系列--“JUC锁”05之 非公平锁
摘要:概要前面两章分析了"公平锁的获取和释放机制",这一章开始对“非公平锁”的获取锁/释放锁的过程进行分析。内容包括:参考代码获取非公平锁(基于JDK1.7.0_40)释放非公平锁(基于JDK1.7.0_40)关于锁的数据结构请参考"Java多线程系列--“JUC锁”03之 公平锁(一)",锁的使用示例请参考“Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock”。转载请注明出处:http://www.cnblogs.com/skywang12345/p/3496651.html参考代码下面给出Java1.7.0_40版本中,Reentr
阅读全文
Java多线程系列--“JUC锁”04之 公平锁(二)
摘要:概要前面一章,我们学习了“公平锁”获取锁的详细流程;这里,我们再来看看“公平锁”释放锁的过程。内容包括:参考代码释放公平锁(基于JDK1.7.0_40)“公平锁”的获取过程请参考“Java多线程系列--“JUC锁”03之 公平锁(一)”,锁的使用示例请参考“Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock”。注意:(01) 这里是以“公平锁”来进行说明。(02) 关于本章的术语,如“AQS”,“CAS函数”,“CLH队列”,“公平锁”,“非公平锁”,“独占锁”,“共享锁”等内容,请参考Java多线程系列--“JUC锁”03之 公平锁(一)的基本概念。转载请注明出处:h
阅读全文
Java多线程系列--“JUC锁”03之 公平锁(一)
摘要:概要本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40) 一. tryAcquire() 二. addWaiter() 三. acquireQueued() 四. selfInterrupt()“公平锁”的释放锁的机制在后面一章再做介绍,锁的使用示例请参考“Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock”。转载请注明出处:http://www.cnblogs.com/skywang12345/p/3496147.html基本概念本章,我们会讲解“
阅读全文
Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock
摘要:本章对ReentrantLock包进行基本介绍,这一章主要对ReentrantLock进行概括性的介绍,内容包括:ReentrantLock介绍ReentrantLock函数列表ReentrantLock示例在后面的两章,会分别介绍ReentrantLock的两个子类(公平锁和非公平锁)的实现原理。转载请注明出处:http://www.cnblogs.com/skywang12345/p/3496101.htmlReentrantLock介绍ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。顾名思义,ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意
阅读全文
Java多线程系列--“JUC锁”01之 框架
摘要:本章,我们介绍锁的架构;后面的章节将会对它们逐个进行分析介绍。目录如下:01.Java多线程系列--“JUC锁”01之 框架02.Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock03.Java多线程系列--“JUC锁”03之 公平锁(一)04.Java多线程系列--“JUC锁”04之 公平锁(二)05.Java多线程系列--“JUC锁”05之 非公平锁06.Java多线程系列--“JUC锁”06之 Condition条件07.Java多线程系列--“JUC锁”07之 LockSupport08.Java多线程系列--“JUC锁”08之 共享锁和ReentrantRea
阅读全文
Java多线程系列--“JUC原子类”05之 AtomicLongFieldUpdater原子类
摘要:概要AtomicIntegerFieldUpdater, AtomicLongFieldUpdater和AtomicReferenceFieldUpdater这3个修改类的成员的原子类型的原理和用法相似。本章以对基本类型的原子类进行介绍。内容包括:AtomicLongFieldUpdater介绍和函数列表AtomicLongFieldUpdater示例AtomicLongFieldUpdater源码分析(基于JDK1.7.0_40)转载请注明出处:http://www.cnblogs.com/skywang12345/p/3514623.htmlAtomicLongFieldUpdater介绍
阅读全文
Java多线程系列--“JUC原子类”04之 AtomicReference原子类
摘要:概要本章对AtomicReference引用类型的原子类进行介绍。内容包括:AtomicReference介绍和函数列表AtomicReference源码分析(基于JDK1.7.0_40)AtomicReference示例转载请注明出处:http://www.cnblogs.com/skywang1...
阅读全文
Java多线程系列--“JUC原子类”03之 AtomicLongArray原子类
摘要:概要AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray这3个数组类型的原子类的原理和用法相似。本章以AtomicLongArray对数组类型的原子类进行介绍。内容包括:AtomicLongArray介绍和函数列表AtomicLongArray源码分析(基于JDK1.7.0_40)AtomicLongArray示例转载请注明出处:http://www.cnblogs.com/skywang12345/p/3514604.htmlAtomicLongArray介绍和函数列表在"Java多线程系列--“JUC原子类”02之 A
阅读全文
Java多线程系列--“JUC原子类”02之 AtomicLong原子类
摘要:概要AtomicInteger, AtomicLong和AtomicBoolean这3个基本类型的原子类的原理和用法相似。本章以AtomicLong对基本类型的原子类进行介绍。内容包括:AtomicLong介绍和函数列表AtomicLong源码分析(基于JDK1.7.0_40)AtomicLong示例转载请注明出处:http://www.cnblogs.com/skywang12345/p/3514593.htmlAtomicLong介绍和函数列表AtomicLong是作用是对长整形进行原子操作。在32位操作系统中,64位的long 和 double 变量由于会被JVM当作两个分离的32位来进
阅读全文
Java多线程系列--“JUC原子类”01之 框架
摘要:根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。1.基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;2.数组类型: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray ;3.引用类型: AtomicReference, AtomicStampedRerence, AtomicMarkableReference ;4.对象的属性修改类型: AtomicIntegerFieldUpdater, AtomicLongFieldUpdater, AtomicReferenceF
阅读全文
《深入理解Java内存模型》读书总结
摘要:概要文章是《深入理解Java内容模型》读书笔记,该书总共包括了3部分的知识。第1部分,基本概念 包括“并发、同步、主内存、本地内存、重排序、内存屏障、happens before规则、as-if-serial规则、数据依赖性、顺序一致性模型、JMM的含义和意义”。第2部分,同步机制 该部分中就介绍了“同步”的3种方式:volatile、锁、final。对于每一种方式,从该方式的“特性”、“建立的happens before关系”、“对应的内存语义”、“实现方式”等几个方面进行了分析说明。实际上,JMM保证“如果程序正确同步,则执行结果与顺序一致性内存模型的结果相...
阅读全文
Java多线程系列--“基础篇”11之 生产消费者问题
摘要:概要本章,会对“生产/消费者问题”进行讨论。涉及到的内容包括:1. 生产/消费者模型2. 生产/消费者实现转载请注明出处:http://www.cnblogs.com/skywang12345/p/3480016.html1. 生产/消费者模型生产/消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”、“消费者”、“仓库”和“产品”。他们之间的关系如下:(01) 生产者仅仅在仓储未满时候生产,仓满则停止生产。(02) 消费者仅仅在仓储有产品时候才能消费,仓空则等待。(03) 当消费者发现仓储没产品可消费时候会通知生产者生产。(04) 生产者在生产出可消费产品时候,应该通知等待的消费者
阅读全文
Java多线程系列--“基础篇”10之 线程优先级和守护线程
摘要:概要本章,会对守护线程和线程优先级进行介绍。涉及到的内容包括:1. 线程优先级的介绍2. 线程优先级的示例3. 守护线程的示例转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479982.html1. 线程优先级的介绍java 中的线程优先级的范围是1~10,默认的优先级是5。“高优先级线程”会优先于“低优先级线程”执行。java 中有两种线程:用户线程和守护线程。可以通过isDaemon()方法来区别它们:如果返回false,则说明该线程是“用户线程”;否则就是“守护线程”。用户线程一般用户执行用户级任务,而守护线程也就是“后台线程”,一般用来执
阅读全文
Java多线程系列--“基础篇”09之 interrupt()和线程终止方式
摘要:概要本章,会对线程的interrupt()中断和终止方式进行介绍。涉及到的内容包括:1. interrupt()说明2. 终止线程的方式 2.1 终止处于“阻塞状态”的线程 2.2 终止处于“运行状态”的线程3. 终止线程的示例4. interrupted() 和 isInterrupted()的区别转载请注明出处:http://www.cnblogs.com/skywang12345/p/3479949.html1. interrupt()说明在介绍终止线程的方式之前,有必要先对interrupt()进行了解。关于interrupt(),java的djk文档描述如下:http://docs.
阅读全文