这个类真的非常实用,更重要的是 它确实非常简单: 附上自己的代码,可以自己试试: AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一 ...
分类:
其他好文 时间:
2017-05-16 13:07:46
阅读次数:
161
对无序数组的并发搜索的实现可以充分的用到多cpu的优势 一种简单的策略是将原始数组按照期望的线程数进行分割,如果我们计划使用两个线程进行搜索,就可以把一个数组分成两个,每个线程各自独立的搜索,当其中有一个线程找到数据后,立即返回结果的index即可。 首先index需要采用atomicinteger ...
分类:
编程语言 时间:
2017-05-12 19:10:54
阅读次数:
211
AtomicInteger extends Number implements Serializable,内部果然是一个volatile int,可是compareAndSet(CAS),incrementAndGet等原子操作都依赖于unsafe.compareAndSwap,这个应该是对不同平台 ...
分类:
其他好文 时间:
2017-04-22 14:35:04
阅读次数:
141
两段代码 上面两段代码都表示了+1,但是在多线程下Atomic中不需要synchronized,因为Atomic是原子性操作。而++则不行 下面我们来看AtomicInteger源码分析: AtomicInteger用的是sun.misc.Unsafe调用本地方法。 value值用的是volatil ...
分类:
其他好文 时间:
2017-04-12 03:12:01
阅读次数:
215
CAS中有三个参数:内存值V、旧值A、预期值B 以AtomicInteger为例 Unsafe是CAS的核心类,Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开启了一个后门,Unsafe 它提供了硬件级别的原子操作。 valueOffset为变量值 ...
分类:
其他好文 时间:
2017-04-08 00:28:00
阅读次数:
320
更快的原子类:LongAdder 大家对AtomicInteger的基本实现机制应该比较了解,它们是在一个死循环内,不断尝试修改目标值,知道修改成功,如果竞争不激烈,那么修改成功的概率就很高,否则,修改失败的概率就很高,在大量修改失败时,这些原子操作就会进行多次循环尝试,因此性能就会受到影响 那么竞 ...
分类:
编程语言 时间:
2017-03-20 17:48:06
阅读次数:
580
1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时间片之间,需要进行cpu切换,也就是会发生进程的切换。切换涉及到清空寄存器,缓存数据。然后重新加载新的thread所需数据。当一个线程被挂起时,加入到阻塞队列,在 ...
分类:
其他好文 时间:
2017-03-12 20:11:24
阅读次数:
160
AtomicInteger是线程安全的,那么我们就把它和Integer对比一下。思路如下: 创建两个线程,每个线程中对同一个对象执行10000次加法,打印最后的输出结果,代码如下。 我们创建了两个实现了Runnable接口的对象,其中一个定义了一个AtomicInteger对象,另一个使用普通的包装 ...
分类:
其他好文 时间:
2017-03-05 23:01:22
阅读次数:
214
一、原子更新基本类型 AtomicInteger AtomicBoolean AtomicLong 二、原子更新数组 AtomicIntegerArray AtomicLongArray AtomicReferenceArray 三、原子更新引用类型 AtomicReference AtomicRe ...
分类:
编程语言 时间:
2017-02-25 21:26:26
阅读次数:
169
乐观锁 悲观锁 独占锁 共享锁 阻塞算法 非阻塞算法 自旋锁 AQS CLH队列锁 MCS队列锁 Ticket队列锁 SMP NUMA CAS ABA问题 原子变量:AtomicReference AtomicInteger AtomicReferenceFieldUpdater ...
分类:
编程语言 时间:
2017-02-25 15:56:44
阅读次数:
164