Java Concurrency
文章平均质量分 76
yaojiank
这个作者很懒,什么都没留下…
展开
-
Java 理论与实践: 正确使用 Volatile 变量
简介:Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。在这期的Java 理论与实践 中,Brian Goetz 将介绍几种正确使用 volatile 变量的模式,并针对其适用性限制提出一些建议。Java转载 2013-03-20 14:45:21 · 373 阅读 · 0 评论 -
java CopyOnWriteArrayList
CopyOnWriteArrayList是一个线程安全的链表,特别适用于管理监听器列表。Vector或Collections.synchronizedList(List)虽然在列表上add(),remove()和get()方法现在对线程是安全的,但列表中的元素如果是可变的,那么遍历时仍然会抛出ConcurrentModificationException!而CopyOnWriteArrayLi原创 2013-04-24 21:57:32 · 1790 阅读 · 0 评论 -
无锁的数据结构(Lock-Free)及CAS(Compare-and-Swap)机制
当同时存在读写线程时,默认情况下是不保证线程安全的,因而需要利用信号量来进行线程同步(Synchronization),如关键代码段、互斥体等,同时操作系统也提供了相应的API。然而同步并不总是满足条件的且有效率的,比如陷入内核时会有性能损失、死锁、活锁以及资源浪费等。于是Lock-Free和Wait-Free的思想出现了,由于此时不存在读写线程的同步,因而在写线程运行时,读线程也在运行(多核转载 2013-04-17 22:56:16 · 810 阅读 · 0 评论 -
java容器
> —— > —— ArrayList 使用数组来实现 | |—— LinkedList 使用链表来实现 | |—— Vector —— Stack 线程同步原创 2013-05-05 20:18:56 · 576 阅读 · 0 评论 -
ConcurrentHashMap与FutureTask的使用
问题:许多应用的计算过程会相当久,因而会采用某种形式的缓存,重用之前的计算结果以降低延迟、提高吞吐量。例如因数分解,其计算过程可能会相当长,采用缓存将是一种不错的选择。但是如果计算过程是一个并发的行为,那么需要考虑多线程之间的同步。如何解决该问题?首先我们定义一个需要计算很久的接口,如下所示,其中A是输入类型,V是输出类型package cache;public int原创 2013-05-06 21:55:33 · 1232 阅读 · 0 评论