网上资料:

使用 AtomicBoolean 高效并发处理 “只初始化一次” 的功能要求:

1 privatestatic

AtomicBoolean initialized =
newAtomicBoolean(false);
2  
3 publicvoid

init()
4 {
5 if(
initialized.compareAndSet(
false,true)
)
6 {
7 //
这里放置初始化代码....
8 }
9 }

普通方式:

1 publicstatic

volatile

initialized =
false;
2  
3 publicvoid

init()
4 {
5 if(
initialized ==
false){
6 initialized
=
true;
7 //
这里初始化代码....
8 }
9 }

帮助文档:

java.util.concurrent.atomic 

类 AtomicBoolean

java.lang.Object
java.util.concurrent.atomic.AtomicBoolean
所有已实现的接口:
Serializable

public class AtomicBoolean
extends Object
implements Serializable

可以用原子方式更新的 boolean 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicBoolean 可用在应用程序中(如以原子方式更新的标志),但不能用于替换 Boolean

从以下版本开始:
1.5
另请参见:
序列化表格

构造方法摘要
AtomicBoolean() 

          使用初始值 false 创建新的 AtomicBoolean
AtomicBoolean(boolean initialValue) 

          使用给定的初始值创建新的 AtomicBoolean
方法摘要
 boolean compareAndSet(boolean expect, boolean update) 

          如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。
 boolean get() 

          返回当前值。
 boolean getAndSet(boolean newValue) 

          以原子方式设置为给定值,并返回以前的值。
 void lazySet(boolean newValue) 

          最终设置为给定值。
 void set(boolean newValue) 

          无条件地设置为给定值。
 String toString() 

          返回当前值的字符串表示形式。
 boolean weakCompareAndSet(boolean expect, boolean update) 

          如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。
从类 java.lang.Object 继承的方法
cloneequalsfinalizegetClasshashCodenotifynotifyAllwaitwaitwait
构造方法详细信息

AtomicBoolean

public AtomicBoolean(boolean initialValue)
使用给定的初始值创建新的 AtomicBoolean

参数:
initialValue - 初始值

AtomicBoolean

public AtomicBoolean()
使用初始值 false 创建新的 AtomicBoolean

方法详细信息

get

public final boolean get()
返回当前值。

返回:
当前值

compareAndSet

public final boolean compareAndSet(boolean expect,
boolean update)
如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。

参数:
expect - 预期值
update - 新值
返回:
如果成功,则返回 true。返回 False 指示实际值与预期值不相等。

weakCompareAndSet

public boolean weakCompareAndSet(boolean expect,
boolean update)
如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。

可能意外失败并且不提供排序保证,因此几乎只是 compareAndSet 的适当替代方法。

参数:
expect - 预期值
update - 新值
返回:
如果成功,则返回 true。

set

public final void set(boolean newValue)
无条件地设置为给定值。

参数:
newValue - 新值

lazySet

public final void lazySet(boolean newValue)
最终设置为给定值。

参数:
newValue - 新值
从以下版本开始:
1.6

getAndSet

public final boolean getAndSet(boolean newValue)
以原子方式设置为给定值,并返回以前的值。

参数:
newValue - 新值
返回:
以前的值

toString

public String toString()
返回当前值的字符串表示形式。

覆盖:
类 Object 中的 toString
返回:
当前值的字符串表示形式。

官方文档参考:http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/java/util/concurrent/atomic/AtomicBoolean.html

AtomicBoolean介绍的更多相关文章

  1. AtomicBoolean介绍与使用

       java.util.concurrent.atomic.AtomicBoolean 继承自Object. 介绍: 在这个Boolean值的变化的时候不允许在之间插入,保持操作的原子性 方法和举例 ...

  2. Java并发编程(四):线程安全性

    一.定义 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的. 二.线程安 ...

  3. Java并发之原子操作类汇总

    当程序更新一个变量时,如果是多线程同时更新这个变量,可能得到的结果与期望值不同.比如:有一个变量i,A线程执行i+1,B线程也执行i+1,经过两个线程的操作后,变量i的值可能不是期望的3,而是2.这是 ...

  4. 关于Synchornized,Lock,AtomicBoolean和volatile的区别介绍

    1.  volatile 变量可以被看作是一种 "程度较轻的 synchronized". 2.  Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的 ...

  5. JMM以及并发三大特性介绍(包括解决方案)

    JMM结构图: JMM对同步的8种操作: JMM的同步规则: Countdownlatch介绍: 该类功能是可以阻塞线程,并在保证线程满足特定条件下,继续执行.如上图,Countdownlatch的c ...

  6. juc原子类之二:基本类型原子类AtomicInteger(AtomicLong、AtomicBoolean)

    一.AtomicInteger简介 AtomicInteger, AtomicLong和AtomicBoolean这3个基本类型的原子类的原理和用法相似.以AtomicInteger对基本类型的原子类 ...

  7. java并发编程(十一)----(JUC原子类)基本类型介绍

    上一节我们说到了基本原子类的简单介绍,这一节我们先来看一下基本类型: AtomicInteger, AtomicLong, AtomicBoolean.AtomicInteger和AtomicLong ...

  8. AQS源码解析(一)-AtomicBoolean源码解析

    基本类: AtomicInteger AtomicLong AtomicBoolean 数组类型: AtomicIntegerArray AtomicLongArray AtomicReference ...

  9. CompletableFuture用法介绍

    一.CompletableFuture用法入门介绍 入门介绍的一个例子: package com.cy.java8; import java.util.Random; import java.util ...

随机推荐

  1. Mac系统下查看Android studio默认debug签名与正式签名的SHA1值

    https://blog.csdn.net/weixin_32364917/article/details/80095063 获取默认debug签名SHA1值方法,也可以直接打开系统的终端 输入: k ...

  2. 剑指offer【11】- 矩形覆盖

    题目:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 在分析前不知道是什么序列,所以先看了n=1,n=2,n=3,n= ...

  3. i春秋web作业2.26

    Web安全工程师(入门班) [全国线上入门班53期]课后作业   2020-2-26 DorinXL   1)为什么说js校验是一种不安全的校验方式? js校验不安全,是因为用户很容易通过控制台删除或 ...

  4. 绿洲作业第二周 - Y3每日中文学习任务清单

    1. 本周仍是古诗学习周,老师已在“最美诵读”上布置本周需完成的任务,请孩子在“最美诵读”小程序中,结合老师发的学习任务清单,合理安排时间进行学习.如果孩子另有学习安排,可在周日(2.23)23:59 ...

  5. vue开发之图片加载不出来问题解决

    在使用vue开发项目的时候,经常会遇到的一个问题就是:图片加载不出来.下面是我总结的几种图片加载不出来的情况及解决办法. 一.项目打包完成后,打开整体空白 1.路径问题 原因 在vue+webpack ...

  6. sm4 加解密示例

    int do_crypt(char *outfile) { unsigned ]; int outlen, tmplen; /* Bogus key and IV: we'd normally set ...

  7. Eclipse 中 Syntax error on token "Invalid Character", delete this token 的解决

    eclipse中遇到了Syntax error on token "Invalid Character", delete this token(令牌“无效字符”上的语法错误,删除此 ...

  8. jumpserver_跳板机实操

    首先,jumpserver是什么呢? Jumpserver 是一款由Python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能.基于ssh协议来管理,客户端无需安装agent. 特点: 完全开 ...

  9. 计算a^b==a+b在(l,r)的对数Codeforces Round #597 (Div. 2)

    题:https://codeforces.com/contest/1245/problem/F 分析:转化为:求区间内满足a&b==0的对数(解释见代码) ///求满足a&b==0在区 ...

  10. day17-反射

    #反射最常用的两个方法:hasattr getattr # 1. 反射对象属性,反射对象方法: class Goods: def __init__(self,name): self.name = na ...