并发之AtomicIntegerArray
public class IntegerArrayTest {
public static void main(String[] args) {
Integer a=1;
Integer b=13;
Integer c=25;
/**
* 0000 0000 0000 0000 0000 0000 0000 0000
* 0000 0000 0000 0000 0000 0000 0000 0001 0的个数为31 1
* 0000 0000 0000 0000 0000 0000 0000 1101 0的个数为28 13
* 0000 0000 0000 0000 0000 0000 0001 1001 0的个数为27 25
* a的二进制为=1 最左边开始数起连续0的个数为31
* b的二进制为=1101 最左边开始数起连续0的个数为28
* c的二进制为=11001 最左边开始数起连续0的个数为27
*/
System.out.println("a的二进制为="+Integer.toBinaryString(a)+" 最左边开始数起连续0的个数为"+Integer.numberOfLeadingZeros(a));
System.out.println("b的二进制为="+Integer.toBinaryString(b)+" 最左边开始数起连续0的个数为"+Integer.numberOfLeadingZeros(b));
System.out.println("c的二进制为="+Integer.toBinaryString(c)+" 最左边开始数起连续0的个数为"+Integer.numberOfLeadingZeros(c));
}
}
public class AtomicIntegerArray implements java.io.Serializable {
private static final long serialVersionUID = 2862133569453604235L;
private static final Unsafe unsafe = Unsafe.getUnsafe();
private static final int base = unsafe.arrayBaseOffset(int[].class);
private static final int shift;
private final int[] array;
static {
int scale = unsafe.arrayIndexScale(int[].class);
if ((scale & (scale - 1)) != 0)
throw new Error("data type scale not a power of two");
shift = 31 - Integer.numberOfLeadingZeros(scale);
}
}
/**
* 原子性的设置一个值
*/
public final void set(int i, int newValue) {
unsafe.putIntVolatile(array, checkedByteOffset(i), newValue);
}
下面的源码是AutomicInteger类中的set()方法
/**
* 原子性的设置一个值
*/
public final void set(int newValue) {
value = newValue;
}
public static void automicIntegerArray() {
/**
* 创建一个原子性的数组,长度为5
*/
AtomicIntegerArray atomicArray = new AtomicIntegerArray(5);
/**
* 设置第一个元素的值为5
*/
atomicArray.set(0, 5);
/**
* 第一个元素减去1
*/
int current = atomicArray.decrementAndGet(0);
System.out.println("current = " + current);//current = 4
}
/**
* 创建一个原子性整※数组,并且长度为length;而且初始值都为0
* elements initially zero.
*/
public AtomicIntegerArray(int length) {
array = new int[length];
}
并发之AtomicIntegerArray的更多相关文章
- 并发之java.util.concurrent.atomic原子操作类包
15.JDK1.8的Java.util.concurrent.atomic包小结 14.Java中Atomic包的原理和分析 13.java.util.concurrent.atomic原子操作类包 ...
- 微信公众号开发之VS远程调试
目录 (一)微信公众号开发之VS远程调试 (二)微信公众号开发之基础梳理 (三)微信公众号开发之自动消息回复和自定义菜单 前言 微信公众平台消息接口的工作原理大概可以这样理解:从用户端到公众号端一个流 ...
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
前言: 为了加快开发效率,目前公司一些功能使用H5开发,这里难免会用到Js与Java函数互相调用的问题,这个Android是提供了原生支持的,不过存在安全隐患,今天我们来学习一种安全方式来满足Js与j ...
- Android混合开发之WebView与Javascript交互
前言: 最近公司的App为了加快开发效率选择了一部分功能采用H5开发,从目前市面的大部分App来讲,大致分成Native App.Web App.Hybrid App三种方式,个人觉得目前以Hybri ...
- UWP开发之Template10实践二:拍照功能你合理使用了吗?(TempState临时目录问题)
最近在忙Asp.Net MVC开发一直没空更新UWP这块,不过有时间的话还是需要将自己的经验和大家分享下,以求共同进步. 在上章[UWP开发之Template10实践:本地文件与照相机文件操作的MVV ...
- UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)
前面[UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理]章节已经提到过Template10,为了认识MvvmLight的区别特做了此实例. 原代码地址:ht ...
- UWP开发之Mvvmlight实践七:如何查找设备(Mobile模拟器、实体手机、PC)中应用的Log等文件
在开发中或者后期测试乃至最后交付使用的时候,如果应用出问题了我们一般的做法就是查看Log文件.上章也提到了查看Log文件,这章重点讲解下如何查看Log文件?如何找到我们需要的Packages安装包目录 ...
- Android混合开发之WebView使用总结
前言: 今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结. 混合开发相关博客: Android混合开发之WebView使用总结 Android混合开 ...
- Android Studio快速开发之道
概述 现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. P ...
随机推荐
- [Mvel]Mvel2.0使用指南一 基础
MVEL在很大程度上受到Java语法的启发,作为一个表达式语言,也有一些根本的区别,旨在更高的效率,例如:直接支持集合.数组和字符串匹配等操作以及正则表达式. MVEL用于执行使用Java语法编写的表 ...
- C#连接Sqlite
1.Slite简介 SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需 ...
- ASP调用存储过程访问SQL Server
ASP调用存储过程访问SQL Server 2011-02-15 10:22:57 标签:asp 数据库 sQL 存储过程 Server ASP和存储过程(Stored Procedures)的文章 ...
- 在Blender上安装RenderMan插件
2018/3/27 Download and Install Blender itself Download RenderMan Installer (Need to register an acco ...
- MySql必知必会实战练习(三)数据过滤
在之前的博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,MySql必知必会实战练习(二)数据检索中介绍了所有的数据检索操作,下面对数据过滤操作进行总结. 1. whe ...
- Eclipse环境搭建配置操作
1.选择window 2.设置字体 3.设置编码格式:国际编码:UTF-8 第一个地方设置编码格式 第二个地方设置编码格式:这个更重要些 4.配置26个英文小写字母. 作用:能够在开发时提示你,快速开 ...
- 5,基于关系和超链接的 API
Tutorial 5: Relationships & Hyperlinked APIs At the moment relationships within our API are repr ...
- java RE(正则表达式)
验证姓名,邮箱,手机号,密码 import java.util.regex.Pattern; /** * 账户相关属性验证工具 * */ public class AccountValidatorUt ...
- HTML服务器控件与Web服务器控件
asp.net之所以现在开发方便和快捷,关键是它有一组强大的控件库,包括web服务器控件,web用户控件,web自定义控件,html服务器控件和html控件等.这里主要整理一下html控件.html服 ...
- imageView添加阴影和边框
注意:大量设置阴影会造成卡顿!!! 用上这句之后流畅度大大增加:imageV.layer.shouldRasterize = YES; 例: // 设置阴影 imageV.layer.shadowOf ...