Java™ 教程(原子变量)

本文探讨了Java中使用原子变量防止线程干扰的方法,通过AtomicInteger类替代int字段,实现无锁线程安全计数器,避免了同步对活性的影响。

原子变量

java.util.concurrent.atomic包定义了支持单个变量的原子操作的类,所有类都有getset方法,类似于对volatile变量的读写操作,也就是说,set与在同一个变量上任何后续的get具有先发生关系,compareAndSet原子方法也具有这些内存一致性特性,适用于整数原子变量的简单原子算法也是如此。

要查看如何使用此包,让我们返回我们最初用于演示线程干扰的Counter类:

class Counter {
    private int c = 0;

    public void increment() {
        c++;
    }

    public void decrement() {
        c--;
    }

    public int value() {
        return c;
    }

}

使Counter免受线程干扰的一种方法是使其方法同步,如在SynchronizedCounter中:

class SynchronizedCounter {
    private int c = 0;

    public synchronized void increment() {
        c++;
    }

    public synchronized void decrement() {
        c--;
    }

    public synchronized int value() {
        return c;
    }

}

对于这个简单的类,同步是可接受的解决方案,但是对于更复杂的类,我们可能希望避免不必要的同步对活性的影响,用AtomicInteger替换int字段允许我们在不使用同步的情况下防止线程干扰,如在AtomicCounter中:

import java.util.concurrent.atomic.AtomicInteger;

class AtomicCounter {
    private AtomicInteger c = new AtomicInteger(0);

    public void increment() {
        c.incrementAndGet();
    }

    public void decrement() {
        c.decrementAndGet();
    }

    public int value() {
        return c.get();
    }

}

上一篇:执行器
下一篇:配置实用程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值