AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。
来看AtomicInteger提供的接口。
//获取当前的值
public final int get()
//取当前的值,并设置新的值
public final int getAndSet(int newValue)
//获取当前的值,并自增
public final int getAndIncrement()
//获取当前的值,并自减
public final int getAndDecrement()
//获取当前的值,并加上预期的值
public final int getAndAdd(int delta)
... ...
getAndSet:设置为新值,返回设置之前的值。此方法为原子性操作,即保证在得到当前值与设置新值之间,没有任何其他更新操作。
01.public final int getAndSet(int newValue) {
02. for (;;) {
03. int current = get();
04. if (compareAndSet(current, newValue))
05. return current;
06. }
07. }
getAndIncrement:当前值加一,返回自增前的值。此方法为原子性操作,即保证在得到当前值与自增之间,没有任何其他更新操作。举个例子,假如是value++,两个线程同时调用此函数,两个线程都取到了当前值100,然后都基于100加一,最后得到101,miss掉了一次自增。采用compareAndSet,两个线程同时取到当前值100,线程一成功调用compareAndSet,当前值变为101,返回;线程二调用compareAndSet失败,回到循环头,重新取得一个新的当前值101,接着成功调用comareAndSet,更新当前值为102,返回
01.public final int getAndIncrement() {
02. for (;;) {
03. int current = get();
04. int next = current + 1;
05. if (compareAndSet(current, next))
06. return current;
07. }
08.nbsp;}
compareAndSet:如果当前值与期望值(第一个参数)相等,则设置为新值(第二个参数),设置成功返回true。
01.public final boolean compareAndSet(int expect, int update) {
02. return unsafe.compareAndSwapInt(this, valueOffset, expect, update);
03. }
compareAndSet:如果当前值与期望值相等,更新对象的一个整数属性(field)为给定的值。更新则返回true,否则为false。此方法为原子性操作,而且是native方法。
01.public native boolean compareAndSwapInt(Object obj, long offset,
02. int expect, int update);
分享到:
相关推荐
`Atomic`类位于`java.util.concurrent.atomic`包中,包括如`AtomicInteger`、`AtomicLong`、`AtomicBoolean`等,分别对应不同类型的原子变量。它们提供了线程安全的更新操作,例如`incrementAndGet()`方法,能够在多...
总结来说,Java多线程中的原子操作是保证并发安全的重要手段,通过使用`java.util.concurrent.atomic`包中的原子类,开发者可以编写出高效且线程安全的代码。同时,自定义的数据结构和工具类如CircularSet和...
java.util.concurrent.atomic包中的原子类,如AtomicInteger、AtomicLong等,使用了硬件级别的CAS(Compare and Swap)指令来实现无锁编程。虽然CAS操作不会导致线程阻塞,但它们仍然具有一定的开销,因为它们需要...
`AtomicInteger`是`java.util.concurrent.atomic`包中的一个核心类,它代表了一个可以进行原子操作的int类型变量。这个类不仅提供了基础的get和set方法,这两个方法具有与volatile变量相同内存语义,保证了在多线程...
AtomicInteger 类是一个原子整数类型,提供了 incrementAndGet、decrementAndGet、addAndGet 等方法,用于原子地更新整数值。例如,incrementAndGet 方法可以原子地将整数值增加 1。 CAS 算法的原理 --------------...
AtomicInteger是Java并发编程包中的一种 atomic 变量,主要用于解决多线程中数据同步的问题。AtomicInteger的实现原理是通过使用volatile关键字保证可见性,并使用CAS(Compare-And-Swap)乐观锁来保证原子性。CAS...
Java提供了多种同步机制,如synchronized关键字、volatile变量、java.util.concurrent包中的Lock接口(如ReentrantLock)以及java.util.concurrent.atomic包中的原子类。synchronized提供了互斥访问,确保同一时间...
而 atomic 包中的类,如 AtomicInteger 和 AtomicLong,提供了一种在无锁情况下实现原子操作的方法。 有序性通过 volatile 和 synchronized 关键字以及 happens-before 规则来保证。happens-before 是JMM中的一组...
`AtomicInteger`是Java `util.concurrent.atomic`包中的一个类,它提供了一种无锁的、线程安全的整数操作方式。在多线程环境中,当多个线程同时尝试修改一个`AtomicInteger`实例的值时,`AtomicInteger`会确保这些...
1. **基本类型**:包括`AtomicBoolean`、`AtomicInteger`和`AtomicLong`等,这些类用于实现基本类型的原子操作。 2. **数组类型**:如`AtomicIntegerArray`和`AtomicLongArray`等,它们专门针对数组提供原子操作的...
7. 原子操作模式:使用`java.util.concurrent.atomic`包中的原子类,如`AtomicInteger`、`AtomicLong`等,实现非阻塞的原子操作,提升多线程环境下的性能。 8. 轻量级锁定模式:Java 5引入了`java.util.concurrent....
`java.util.concurrent.atomic`包中的原子类提供了一种无锁编程的解决方案,它们能够在不使用`synchronized`的情况下实现线程安全的更新操作。这些原子类使用了硬件级别的CAS(Compare and Swap)操作,这是一种低级...
8. 原子操作模式:使用java.util.concurrent.atomic包中的原子类,如AtomicInteger,提供一种无锁编程的方式,保证操作的原子性。 9. 软中断和中断检查模式:通过Thread.interrupt()和Thread.isInterrupted()检查并...
Java中的锁装箱是并发编程中的一个重要概念,它涉及到Java的并发工具类,特别是`java.util.concurrent.atomic`包中的原子类。锁装箱是将基本数据类型包装成对象,然后在这些对象上实现线程安全的操作,以提高多线程...
5. **原子类与并发工具类**:介绍了java.util.concurrent.atomic包中的原子类,如AtomicInteger、AtomicLong等,以及Semaphore、CountDownLatch、CyclicBarrier等并发工具类的使用场景和最佳实践。 6. **线程通信**...
然而利用atomic包中相关类型就可以很简单实现此操作,以下是一个计数程序实例: ```java public class Counter { private AtomicInteger ai = new AtomicInteger(); private int i = 0; public static void main...
5. 原子操作模式:使用java.util.concurrent.atomic包中的原子类,如AtomicInteger,提供无锁的并发操作。 四、同步机制 1. synchronized关键字:用于实现线程互斥,保证同一时刻只有一个线程访问共享资源。 2. ...
在Java中,CAS技术可以使用java.util.concurrent.atomic包中的原子类来实现原子操作。例如,使用AtomicBoolean类可以实现锁机制,使用AtomicInteger类可以实现计数器等。 CAS技术的优点 CAS技术的优点是可以在多...