AtomicBoolean的妙用
来源:互联网 发布:电子音乐制作软件水果 编辑:程序博客网 时间:2024/05/16 11:31
在开发中,经常要设置代码开关,通常的做法如下:
//这是一个全局变量 boolean isStart = false;
然后在某一个需要设置开关的位置:
if(!isStart ){ isStart = true; doSomething();}
显然这是线程不安全的,通过使用AtomicBoolean可以这样做:
private static AtomicBoolean isStart = new AtomicBoolean(false);
在开关位置:
if(isStart.compareAndSet(false, true) ) { doSomething(); }
compareAndSet是基于CAS的原子操作,是线程安全的,参照jdk源码的描述:
/** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * * @param expect the expected value * @param update the new value * @return true if successful. False return indicates that * the actual value was not equal to the expected value. */public final boolean compareAndSet(boolean expect, boolean update) { int e = expect ? 1 : 0; int u = update ? 1 : 0; return unsafe.compareAndSwapInt(this, valueOffset, e, u);}
如果isStart 和expect值相同,则设置isStart 为update值,并返回true,否则返回false。
0 0
- AtomicBoolean的妙用
- AtomicBoolean的用法
- AtomicBoolean多线程的使用
- AtomicBoolean
- AtomicBoolean
- android AtomicBoolean类的使用
- AtomicBoolean 的使用,就是替代if语句
- /()/的妙用
- ${}的妙用
- 基于CAS思想的java并发AtomicBoolean实例详解
- AtomicBoolean运用
- AtomicBoolean使用
- AtomicBoolean使用
- AtomicBoolean介绍
- 理解AtomicBoolean
- 理解AtomicBoolean
- AtomicBoolean使用方法
- Rpm软件包管理工具的妙用妙用
- iOS证书说明和发布
- [刷题]Best Time to Buy and Sell Stock III
- 轻松搞定面试中的链表题目
- 收集的Android开源框架及其地址(备用)
- oracle 与OS的存储结构
- AtomicBoolean的妙用
- iOS开发工具Xcode 8.4版本 添加包的操作
- myeclipse10 和eclipse集成tomcat 启动报错报错
- linux主机名被更改为bogon原理分析
- 服务发现:Zookeeper vs etcd vs Consul
- Apache与Tomcat联系及区别
- js进度条(原创可用于学习)
- 轻松搞定面试中的二叉树题目
- 学习笔记 什么是事务型操作