关闭

JAVA CAS原理深度分析

看了一堆文章,终于把JAVA CAS的原理深入分析清楚了。 感谢GOOGLE强大的搜索,借此挖苦下百度,依靠百度什么都学习不到!   参考文档: http://www.blogjava.net/xylz/archive/2010/07/04/325206.html http://blog.hesey.net/2011/09/resolve-aba-by-atomics...
阅读(160) 评论(0)

Java CAS 和ABA问题

独占锁:是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。 乐观锁:每次不加锁,假设没有冲突去完成某项操作,如果因为冲突失败就重试,直到成功为止。 一、CAS 操作 乐观锁用到的机制就是CAS,Compare and Swap。 CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V...
阅读(153) 评论(0)

各种同步方法性能比较(synchronized,ReentrantLock,Atomic)

5.0的多线程任务包对于同步的性能方面有了很大的改进,在原有synchronized关键字的基础上,又增加了ReentrantLock,以及各种Atomic类。了解其性能的优劣程度,有助与我们在特定的情形下做出正确的选择。  总体的结论先摆出来:   synchronized:  在资源竞争不是很激烈的情况下,偶尔会有同步的情形下,synchronized是很合适的。原因在于,编译程...
阅读(557) 评论(0)

java 中的Unsafe

在阅读AtomicInteger的源码时,看到了这个类:sum.msic.Unsafe,之前从没见过。所以花了点时间google了一下。   Unsafe的源码:http://www.docjar.com/html/api/sun/misc/Unsafe.java.html   Unsafe源码中的描述如下:    写道 A collection of m...
阅读(371) 评论(0)

AtomicInteger与Volatile修饰

今天写代码,尝试使用了AtomicInteger这个类,感觉使用起来很爽,特别适用于高并发访问,下面贴一个简单的例子: Java代码   CashierContext类部分代码:      private Map counter          = new HashMap();         private void initCounter() {     ...
阅读(306) 评论(0)

atomic vs volatile

结论: atomic比volatile靠谱 java.util.concurrent.atomic.Atomic*原子类和volatile关键字是java中两种常见的处理多线程下数据共享读写的机制。二者看似相同,但是在实际应用中有着不小的差别。 volatile关键字是通过本地代码实现的写锁,只保证知有一个线程在写某个数据。JVM为了提高数据存取的速度,允许每个线程在自己独立的数据块,...
阅读(250) 评论(0)

Java Atomic

我们知道volatile修饰的变量可以实现基本的加载和赋值的原子性,但是对于像i++等操作就不能保证原子性了,在JDK1.5之前我们只能通过 synchronized(阻塞的方式)实现这些复合操作的原子性,在JDK1.5中java.util.concurrent.atomic 包提供了若干个类能实现对int,long,boolean,reference的几个特殊方法非阻塞原子性,这一系列类的主要基...
阅读(273) 评论(0)

java.util.concurrent.atomic原子操作类包

这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。实际上是借助硬件的相关指令来实现的,不会阻塞线程(或者说只是在硬件级别上阻塞了)。可以对基本数据、...
阅读(249) 评论(0)

Java中的Atomic包使用指南

引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝对保证线程不被阻塞。 Atomic包介绍 在Atomic包里一共有12个类,四种原子更新方式,分别...
阅读(335) 评论(0)

原子变量(AtomicLong, AtomicInteger, AtomicReference)

J2SE 5.0提供了一组atomic class来帮助我们简化同步处理。基本工作原理是使用了CAS实现了对一个long, integer, 对象的增、减、赋值(更新)操作. 比如对于++运算符AtomicInteger可以将它持有的integer 能够atomic 地递增。在需要访问两个或两个以上 atomic变量的程序代码(或者是对单一的atomic变量执行两个或两个以上的操作)通常都需要被s...
阅读(291) 评论(0)

AtomicReference原子类

AtomicReference介绍和函数列表 AtomicReference是作用是对"对象"进行原子操作。 AtomicReference函数列表 // 使用 null 初始值创建新的 AtomicReference。 AtomicReference() // 使用给定的初始值创建新的 AtomicReference。 AtomicReference(V initialVa...
阅读(471) 评论(0)

AtomicBoolean介绍与使

java.lang.Object       java.util.concurrent.atomic.AtomicBoolean 继承自Object。   介绍:                    在这个Boolean值的变化的时候不允许在之间插入,保持操作的原子性 方法和举例compareAndSet(boolean expect, boolean ...
阅读(1670) 评论(0)

Java多线程 原子变量:最简单高效的tryLock

java 文档:http://doc.java.sun.com/DocWeb/api/all/java.util.concurrent.atomic.AtomicBoolean Java代码   import java.util.concurrent.atomic.AtomicBoolean;         public class Lock {          pr...
阅读(1197) 评论(0)
    个人资料
    • 访问:7020612次
    • 积分:61538
    • 等级:
    • 排名:第34名
    • 原创:250篇
    • 转载:2618篇
    • 译文:3篇
    • 评论:663条
    文章分类
    最新评论