
并发编程
文章平均质量分 83
tomato__
这个作者很懒,什么都没留下…
展开
-
Persistent Ideal Hash Tries---一种Java实现
最近看关于clojure的资料,从rich Hickey(clojure的创造者)的《Persistent Data Structure and Managed Reference》中看到了关于ideal hash trees的介绍,于是找到了Phil Bagwell关于"ideal hash trees"的论文,研究了一下,并结合rich Hickey关于Persistent Ideal H原创 2014-04-14 15:47:04 · 2160 阅读 · 1 评论 -
并发编程实践六:ReentrantReadWriteLock
ReentrantReadWriteLock是一个读写锁,它提供了一个读锁和一个写锁,读锁用于只读操作,而写锁用于写入操作,读操作可以并行进行,而写操作则是互斥的。读锁和写锁的分离在一些写少读多的应用中可以带来性能上的提升,例如:一个hashmap在构造之后很少修改,却经常进行查找操作,这样查找操作就可以并发进行从而提高性能。这篇文章首先为你介绍读写锁的基本特性,在具体应用中需要解决的问题,然后介原创 2014-05-20 16:15:37 · 2187 阅读 · 0 评论 -
Java并发编程5-Java存储模式
本文介绍Java存储模式和它的作用,Happens-before,并通过实例讲解在代码中怎么运用Happens-before原创 2014-04-04 17:21:07 · 1537 阅读 · 0 评论 -
并发编程实践四:实现正确和高效的锁
你是否觉得锁是一种很神奇的东西,在并发编程中,你只需要将你的代码加上锁,就能保证代码是线程安全的(当然现实和感觉有很大差别,代码的线程安全是非常复杂的),那么,这些都是怎么做到的呢?当存在大量线程同时竞争锁时,竞争失败的锁会怎么做呢?锁又是怎么保证这一切高效的执行的呢?这篇文章将为你回答这些问题,首先我将介绍怎样实现一个正确的锁,然后介绍高效的锁应该具备的条件,最后将介绍两种常用的队列锁算法:CL原创 2014-05-10 11:20:15 · 3258 阅读 · 0 评论 -
并发编程实践三:Condition
Condition实例始终被绑定到一个锁(Lock)上,Lock替代了Java的synchronized方法,而Condition则替代了Object的监视器方法,包括wait、notify和notifyAll(想更多的了解可以看我的博客:Java并发编程3-等待、通知和中断),而在Condition中对应为await、signal和signalAll。这篇文章主要讲述Condition的使用方法原创 2014-05-06 11:04:10 · 2412 阅读 · 0 评论 -
并发编程实践一:Non-Blocking队列算法
队列是一种常用的数据结构,这片文章主要是介绍JDK中的非阻塞队列(ConcurrentLinkedQueue)的算法思想,你可以直接阅读JDK的源代码,也许你需要一些预备知识,例如unsafe类,你可以在这里(http://mishadoff.github.io/blog/java-magic-part-4-sun-dot-misc-dot-unsafe/)找到它的资料,源码的注释中也给出了算法的原创 2014-04-20 12:20:21 · 5102 阅读 · 8 评论 -
Java并发编程3-等待、通知和中断
J:hi,T。T:hi,J。J:今天打算给大家介绍点什么呢?T:今天我打算介绍一下Java并发编程中的等待、通知和中断机制。J:哦,听起来好高深。T:呵呵,我先做一些简单介绍吧。在Java中,每一个对象都有一个等待集合,当线程执行对象的wait操作时,线程将被放入到对象的等待集合中;当线程执行对象的notify操作时,对象等待集合中的线程将被唤醒;当线程的interrupt操作原创 2014-03-28 14:54:31 · 2275 阅读 · 12 评论 -
Java并发编程4-Sleep和Yield
J:今天打算和大家分享什么呢?T:今天准备学习一下Thread的两个静态方法:sleep和yield。J:sleep就是睡眠的意思吗?T:是的,sleep在指定的时间内让当前正在执行的线程睡眠,但睡眠的时间受到系统计时器和调度程序精度和准确性的影响。J:我记得前面讲到过sleep操作不会导致线程丢失监视器的所有权,是吧?T:是的,线程不丢失监视器的所有权,但执行的恢复依赖线程所原创 2014-04-01 14:00:12 · 1696 阅读 · 1 评论 -
Java并发编程1-原子性和可见性
T:hi,J。J:hi,T。最近忙什么呢?T:我最近在研究Java并发编程,刚学习了两个重要的特性:原子性和可见性。J:哦,能解释一下吗?T:你知道什么是原子吗?J:这个我知道,原子就是构成物质的基本单位。T:对,在编程中,原子就是指不可再分的操作,原子性就是指一段代码象原子一样不可再分,一次只能有一个线程执行这段代码,即代码的执行是互斥的。J:我明白了,那可见性呢?原创 2014-03-26 10:42:55 · 3639 阅读 · 1 评论 -
Java并发编程2-同步
上一篇文章中介绍了原子性和可见性,让我们知道了为什么需要使用同步,这篇文章将介绍怎么在Java中使用同步。首先从Java中的同步机制原理开始,然后介绍同步可能导致的风险,最后介绍Java中常见的同步方法。Java的同步机制原理Java中的每个Object都对应到一个监视器,Java中的同步就是使用监视器来实现的,在一个时间只能有一个线程能够获取监视器的锁,而任何其它想要获取同一个监视器锁的原创 2014-03-27 10:57:44 · 2049 阅读 · 2 评论 -
Java并发编程6-final
J:Hi,T。T:Hi,J。J:今天打算介绍点什么呢?T:今天我将介绍Java中的final关键字,这也是我们Java并发编程理论知识学习的最后一课了。J:哦,那我们就赶快开始吧。T:在Java中,定义为final的字段只初始化一次,在正常情况下将不能再被改变(利用反射可以改变final字段的值),编译器可以保留final字段在寄存器中,不用从主存中重载它。使用final字原创 2014-04-09 14:38:07 · 4188 阅读 · 3 评论 -
并发编程实践二:AbstractQueuedSynchronizer
AbstractQueuedSynchronizer,简称AQS,是java.util.concurrent包的synchronizer的基础框架,其它的synchronizer(包括Lock、Semaphore、CountDownLatch、FutureTask等)都是以它作为基础构建的,这篇文章我将对AQS的框架结构作出介绍,包括它对同步状态的管理,功能流程,等待队列的管理等,并涉及到一些实现原创 2014-04-30 10:48:17 · 3840 阅读 · 4 评论 -
并发编程实践五:ReentrantLock
ReentrantLock是一个可重入的互斥锁,实现了接口Lock,和synchronized相比,它们提供了相同的功能,但ReentrantLock使用更灵活,功能更强大,也更复杂。这篇文章将为你介绍ReentrantLock,以及它的实现机制。ReentrantLock介绍通常,ReentrantLock按下面的方式使用:public class ReentrantLockTest原创 2014-05-14 11:17:02 · 3733 阅读 · 6 评论