- Java并发教程
- 并发 - 首页
- 并发 - 概述
- 并发 - 环境搭建
- 并发 - 主要操作
- 线程间通信
- 并发 - 同步
- 并发 - 死锁
- 工具类示例
- 并发 - ThreadLocal
- 并发 - ThreadLocalRandom
- 锁示例
- 并发 - 锁
- 并发 - 读写锁
- 并发 - 条件
- 原子变量示例
- 并发 - AtomicInteger
- 并发 - AtomicLong
- 并发 - AtomicBoolean
- 并发 - AtomicReference
- 并发 - AtomicIntegerArray
- 并发 - AtomicLongArray
- 并发 - AtomicReferenceArray
- 执行器示例
- 并发 - Executor
- 并发 - ExecutorService
- ScheduledExecutorService
- 线程池示例
- 并发 - newFixedThreadPool
- 并发 - newCachedThreadPool
- newScheduledThreadPool
- newSingleThreadExecutor
- 并发 - ThreadPoolExecutor
- ScheduledThreadPoolExecutor
- 高级示例
- 并发 - Futures和Callables
- 并发 - Fork-Join框架
- 并发集合
- 并发 - BlockingQueue
- 并发 - ConcurrentMap
- ConcurrentNavigableMap
- 并发实用资源
- 并发 - 快速指南
- 并发 - 有用资源
- 并发 - 讨论
Java并发 - AtomicBoolean类
java.util.concurrent.atomic.AtomicBoolean 类提供对底层布尔值的原子操作,可以原子地读取和写入,并且包含高级原子操作。AtomicBoolean 支持对底层布尔变量的原子操作。它具有get和set方法,其作用类似于对易变变量的读写操作。也就是说,set操作与随后对同一变量的任何get操作之间存在先行发生关系。atomic compareAndSet方法也具有这些内存一致性特性。
AtomicBoolean 方法
以下是AtomicBoolean类中一些重要方法的列表。
| 序号 | 方法及描述 |
|---|---|
| 1 | public boolean compareAndSet(boolean expect, boolean update) 如果当前值 == 期望值,则原子地将值设置为给定的更新值。 |
| 2 | public boolean get() 返回当前值。 |
| 3 | public boolean getAndSet(boolean newValue) 原子地设置为给定值并返回前一个值。 |
| 4 | public void lazySet(boolean newValue) 最终设置为给定值。 |
| 5 | public void set(boolean newValue) 无条件设置为给定值。 |
| 6 | public String toString() 返回当前值的字符串表示形式。 |
| 7 | public boolean weakCompareAndSet(boolean expect, boolean update) 如果当前值 == 期望值,则原子地将值设置为给定的更新值。 |
示例
下面的TestThread程序展示了在基于线程的环境中使用AtomicBoolean变量。
import java.util.concurrent.atomic.AtomicBoolean;
public class TestThread {
public static void main(final String[] arguments) throws InterruptedException {
final AtomicBoolean atomicBoolean = new AtomicBoolean(false);
new Thread("Thread 1") {
public void run() {
while(true) {
System.out.println(Thread.currentThread().getName()
+" Waiting for Thread 2 to set Atomic variable to true. Current value is "
+ atomicBoolean.get());
if(atomicBoolean.compareAndSet(true, false)) {
System.out.println("Done!");
break;
}
}
};
}.start();
new Thread("Thread 2") {
public void run() {
System.out.println(Thread.currentThread().getName() +
", Atomic Variable: " +atomicBoolean.get());
System.out.println(Thread.currentThread().getName() +
" is setting the variable to true ");
atomicBoolean.set(true);
System.out.println(Thread.currentThread().getName() +
", Atomic Variable: " +atomicBoolean.get());
};
}.start();
}
}
这将产生以下结果。
输出
Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false Thread 2, Atomic Variable: false Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false Thread 2 is setting the variable to true Thread 2, Atomic Variable: true Thread 1 Waiting for Thread 2 to set Atomic variable to true. Current value is false Done!
广告