AtomicBoolean
它的两种用法:
1.保证某段语句只执行一次。
首先我们要知道compareAndSet的作用,判断对象当时内部值是否为第一个参数,如果是则更新为第二个参数,且返回ture,否则返回false。那么默认初始化为false,则一个线程把他变为ture,compareAndSet返回ture,进入方法体执行逻辑,那么其他的任何线程进入该方法执行compareAndSet时第一个参数为false,而对象的内部值已经被修改为true,则永远过不了if。
AtomicBoolean called = new AtomicBoolean(false);
final Envelope self = this;
TimeoutTaskReceipt timeoutTaskReceipt = thdf.submitTimeoutTask(new Runnable() {
@Override
public void run() {
self.timeout();
}
}, TimeUnit.MILLISECONDS, msg.getTimeout());
@Override
public void ack(MessageReply reply) {
count(msg);
envelopes.remove(msg.getId());
if (!called.compareAndSet(false, true)) {
return;
}
timeoutTaskReceipt.cancel();
callback.run(reply);
}
2.保证该方法只有一个线程执行,类似于锁的操作
参考一,init方法只执行1次,那么方法执行结束的时候我把对象的值变成false,compareAndSet可以继续可以将对象则的值设置成true,返回true。
@Override
public void run() {
if (exists.compareAndSet(false, true)) { exists.set(false);
} else {
System.out.println(name + " give up");
} }
AtomicBoolean的更多相关文章
- AtomicBoolean使用
使用 AtomicBoolean 高效并发处理 "只初始化一次" 的功能要求: 1 private static AtomicBoolean initialized = new A ...
- AtomicBoolean介绍与使用
java.util.concurrent.atomic.AtomicBoolean 继承自Object. 介绍: 在这个Boolean值的变化的时候不允许在之间插入,保持操作的原子性 方法和举例 ...
- AtomicBoolean运用
AtomicBoolean运用 首先先看如下例子 private static class BarWorker implements Runnable { private static boolean ...
- JAVA多线程两个实用的辅助类(CountDownLatch和AtomicBoolean)
AtomicBoolean它允许一个线程等待一个线程完成任务,然后运行: A boolean value that may be updated atomically. See the java.ut ...
- Java AtomicBoolean (Java代码实战-008)
值得一提的是,Java的AtomXXX类并不是使用了锁的方式进行同步,而是采用了一种新的理念,叫做CAS(Compare And Swap)CAS是一组CPU原语指令,用来实现多线程下的变量同步(原子 ...
- C# AtomicBoolean
using System; using System.Threading; /// <summary> /// Provides lock-free atomic read/write u ...
- java并发编程:线程安全管理类--原子操作类--AtomicBoolean
1.类AtomicBoolean
- Java并发包:AtomicBoolean和AtomicReference
AtomicBoolean AtomicBoolean是一个读和写都是原子性的boolean类型的变量.这里包含高级的原子操作,例如compareAndSet().AtomicBoolean位于J ...
- juc原子类之二:基本类型原子类AtomicInteger(AtomicLong、AtomicBoolean)
一.AtomicInteger简介 AtomicInteger, AtomicLong和AtomicBoolean这3个基本类型的原子类的原理和用法相似.以AtomicInteger对基本类型的原子类 ...
随机推荐
- oracle 使用正则表达式获取字符串中包含的数字
select REGEXP_REPLACE('字符串中包含的数字123,提取后就是123', '[^0-9]', '') from dual;
- [leetcode]416. Partition Equal Subset Sum分割数组的和相同子集
Given a non-empty array containing only positive integers, find if the array can be partitioned into ...
- 向mysql数据库插入大量数据
1. package com.zy.demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P ...
- php Pthread 多线程 (一) 基本介绍
我们可以通过安装Pthread扩展来让PHP支持多线程. 线程,有时称为轻量级进程,是程序执行的最小单元.线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,它与同属 ...
- centos7下源码安装mysql5.7.16
一.下载源码包下载mysql源码包 http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.16.tar.gz 二.安装约定: 用户名:mysql 安装目录 ...
- .net core webapi 部署windows server 2008 r2 笔记
WebAPI部署文档 安装dotnet-dev-win-x64.1.0.4 安装DotNetCore.1.1.0-WindowsHosting 安装vc_redist.x64 安装Windows6.1 ...
- SSH登录到远程linux机器并执行命令
一. 1.JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成 ...
- 数学整合 新(LUOGU)
1.卡特兰数(P2532) 递推式:h(n)=C(2n,n)/(n+1) (n=0,1,2,...) 前十项(从零开始):1, 1, 2, 5, 14, 42, 132, 429, 1430, 486 ...
- python性能监控初试
标 题: python性能监控初试作 者: itdef链 接: http://www.cnblogs.com/itdef/p/3990765.html 欢迎转帖 请保持文本完整并注明出处 之前性能统计 ...
- cocos2d-js 安卓自定义本地通知功能
安卓新手,笔记有理解不当的地方望指出,经过几天折腾终于可以实现类似ios的本地通知功能(ios就几行代码),可能有第三方sdk可以方便实现,暂时没去找 思路: 1. startService 和bin ...