摘要: 一、什么是同步器多线程并发的执行,之间通过某种共享状态来同步,只有当状态满足xxxx条件,才能触发线程执行xxxx。这个共同的语义可以称之为同步器。可以认为以上所有的锁机制都可以基于同步器定制来实现的。而juc(java.util.concurrent)里的思想是将这些场景抽象出来的语义通过统一的同步框架来支持。juc里所有的这些锁机制都是基于AQS(AbstractQueuedSynchronizer)框架上构建的。下面简单介绍下AQS(AbstractQueuedSynchronizer)。可以参考Doug Lea的论文The java.util.concurrent Synchroniz 阅读全文
posted @ 2013-10-26 10:38 为了生活,加油 阅读(1903) 评论(0) 推荐(0) 编辑
摘要: 一、概述:BlockingQueue作为线程容器,可以为线程同步提供有力的保障。二、BlockingQueue定义的常用方法1.BlockingQueue定义的常用方法如下:抛出异常特殊值阻塞超时插入add(e)offer(e)put(e)offer(e, time, unit)移除remove()poll()take()poll(time, unit)检查element()peek()不可用不可用 1)add(anObject):把anObject加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则招聘异常 2)offer(anObject):.. 阅读全文
posted @ 2013-10-26 10:36 为了生活,加油 阅读(466) 评论(0) 推荐(0) 编辑
摘要: 一、双向队列DequeQueue除了前面介绍的实现外,还有一种双向的Queue实现Deque。这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图描述的是Deque的完整体系图。需要说明的是LinkedList也已经加入了Deque的一部分(LinkedList是从jdk1.2 开始就存在数据结构)。Deque在Queue的基础上增加了更多的操作方法。从上图可以看到,Deque不仅具有FIFO的Queue实现,也有FILO的实现,也就是不仅可以实现队列,也可以实现一个堆栈。同时在Deque的体系结构图中可以看到,实现一个Deque可以使用数组(ArrayDeq 阅读全文
posted @ 2013-10-26 10:34 为了生活,加油 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 一、Map体系Hashtable是JDK 5之前Map唯一线程安全的内置实现(Collections.synchronizedMap不算)。Hashtable继承的是Dictionary(Hashtable是其唯一公开的子类),并不继承AbstractMap或者HashMap。尽管Hashtable和HashMap的结构非常类似,但是他们之间并没有多大联系。ConcurrentHashMap是HashMap的线程安全版本,ConcurrentSkipListMap是TreeMap的线程安全版本。最终可用的线程安全版本Map实现是ConcurrentHashMap/ConcurrentSkipL 阅读全文
posted @ 2013-10-26 10:33 为了生活,加油 阅读(605) 评论(0) 推荐(0) 编辑
摘要: 一、前言concurrentHashMap与ConcurrentSkipListMap性能测试在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSkipListMap 的4倍左右。但ConcurrentSkipListMap有几个ConcurrentHashMap 不能比拟的优点:1、ConcurrentSkipListMap 的key是有序的。2、ConcurrentSkipListMap 支持更高的并发。ConcurrentSkipListMap 的存取时间是log(N),和线程数几乎无关。也就是说在数据量一定的情况下,并发的线程越多,Conc 阅读全文
posted @ 2013-10-26 10:32 为了生活,加油 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 首要结论:volatile 变量提供了线程的可见性,并不能保证线程安全性和原子性。什么是线程的可见性:锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性要更加复杂一些,它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 —— 如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前的值或不一致的值,这将引发许多严重问题。具体看volatile的语义:volatile相当于s 阅读全文
posted @ 2013-10-26 10:27 为了生活,加油 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 一、何谓Atomic?Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成)在x86 平台上,CPU提供了在指令执行期间对总线加锁的手段。CPU芯片上有一条引线#HLOCK pin,如果汇编语言的程序中在一条指令前面加上前缀"LOCK",经过汇编以后的机器代码就使CPU在执行这条指令的时候把#HLOCK pin的电位拉低,持续到这条指 阅读全文
posted @ 2013-10-26 10:27 为了生活,加油 阅读(445) 评论(0) 推荐(0) 编辑