博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无锁算法
阅读量:6820 次
发布时间:2019-06-26

本文共 767 字,大约阅读时间需要 2 分钟。

无锁算法

在Java并发编程中,Java提供了很多并发编程工具类。在JUC包下有一个包叫atomic,下面所有的工具,我们都称为它是无锁算法的一种实现。

相对于有锁算法来说,无锁算法不会使等待线程休眠或者阻塞。它的具体原理是这样的:

比如有一个变量x,初始值为0

int x = 0

现在有两个线程A-ThreadB-Thread同时去修改变量 x,是x++,正确执行的情况下,x最后结果应该是2

利用无锁算法的实现是这样的

public final int incrementAndGet() {    for (;;) {        int current = get();        int next = current + 1;                # compareAndSet会原子性的执行先判断current和内存中的值是否相等,如果不等就失败返回false        if (compareAndSet(current, next))            return next;    }}

在这个列子中,利用无锁算法,当线程需要重新设置变量的值时,都会携带当前值current和新值new去调用 `compareAndSet()` 方法,该方法在执行set操作会原子性的执行 先判断current和内存中的值是否相等,如果不等就失败返回false,否则就会把值设置为新值。

这个原子性的动作_先判断current和内存中的值是否相等,如果不等就失败返回false_的语句需要操作系统支持这种指令语句。所以incrementAndGet方法是一个原子性的操作方法

所以当A-Thread、B-Thread同时调用incrementAndGet去修改x值,x值的变化过程只会是

0->1->2

转载地址:http://nipzl.baihongyu.com/

你可能感兴趣的文章