Java并发编程:volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。
volatile关键...
分类:
编程语言 时间:
2015-01-01 16:00:40
阅读次数:
175
1 锁的独占与共享
java并发包提供的加锁模式分为独占锁和共享锁,独占锁模式下,每次只能有一个线程能持有锁,ReentrantLock就是以独占方式实现的互斥锁。共享锁,则允许多个线程同时获取锁,并发访问 共享资源,如:ReadWriteLock。AQS的内部类Node定义了两个常量SHARED和EXCLUSIVE,他们分别标识 AQS队列中等待线程的锁获取模式。
很显...
分类:
编程语言 时间:
2014-12-31 14:40:25
阅读次数:
232
内置锁和内置条件队列一起,一个简单的应用是创建可阻塞的有界缓存区,java并发包的BlockingQueue就是一个利用Lock和显式条件队列实现的可阻塞的有界队列。总结内置锁和内置条件的原理,这里我们用另一种方式实现简单的可阻塞缓存。源码如下:
首先,创建一抽象有界缓存类ABoundedBuffer,提供插入和删除的基本实现。
/**
* @title :AB...
分类:
编程语言 时间:
2014-12-30 11:53:34
阅读次数:
119
目前关于线程安全性没有一个统一的定义,作者自己总结了一个定义,如下:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协调,这个类都能表现出正确的行为,那么就称这个类是线程安全的。在并发编程中,由于不恰当的执行时序而出现不确定的结...
分类:
编程语言 时间:
2014-12-30 11:31:55
阅读次数:
183
1 什么是条件队列
它使得一组线程能够通过某种方式来等待特定的条件变成真,条件队列的元素是一个个正在等待状态的线程。对象的内置锁(synchronized语义对应的同步机制),关联着一个内置的条件队列。Object的wait/notify/notifyAll等方法构成了内部条件队列的API(即将内部锁与内部条件队列关联的机制)。 内部条件队列是需要内置锁保护的,即:需要调用对象X中...
分类:
编程语言 时间:
2014-12-29 16:56:34
阅读次数:
243
AQS框架提供的另外一个优秀机制是锁获取超时的支持,当大量线程对某一锁竞争时可能导致某些线程在很长一段时间都获取不了锁,在某些场景下可能希望如果线程在一段时间内不能成功获取锁就取消对该锁的等待以提高性能,这时就需要用到超时机制。在JDK1.5之前还没有juc工具,当时的并发控制职能通过JVM内置的synchronized关键词实现锁,但对一些特殊要求却力不从心,例如超时取消控制。JDK1.5开始引...
分类:
编程语言 时间:
2014-12-27 21:50:36
阅读次数:
247
《Java并发编程实战》要点笔记及java.util.concurrent 的结构介绍...
分类:
编程语言 时间:
2014-12-27 19:04:31
阅读次数:
453
在CLH锁核心思想的影响下,Java并发包的基础框架AQS以CLH锁作为基础而设计,其中主要是考虑到CLH锁更容易实现取消与超时功能。比起原来的CLH锁已经做了很大的改造,主要从两方面进行了改造:节点的结构与节点等待机制。在结构上引入了头结点和尾节点,他们分别指向队列的头和尾,尝试获取锁、入队列、释放锁等实现都与头尾节点相关,并且每个节点都引入前驱节点和后后续节点的引用;在等待机制上由原来的自旋改...
分类:
编程语言 时间:
2014-12-26 23:02:18
阅读次数:
370
1关于可重入锁
ReentrantLock是基于AQS实现的可重入的同步工具类,它提供了两种同步器的实现即公平锁FairSync和非公平锁NonfairSync。它提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,所有的加锁和解锁都是显式的。tryLock(),tryLock(long
,TimeUnit)分别提供了可轮询的、可定时的锁获取方式。 Lock()提供了无...
分类:
编程语言 时间:
2014-12-26 16:50:58
阅读次数:
283
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办...
分类:
编程语言 时间:
2014-12-23 17:02:13
阅读次数:
259