今天写代码。尝试使用了AtomicInteger这个类,感觉使用起来非常爽,特别适用于高并发訪问。能保证i++,++id等系列操作的原子性。

++i和i++操作并非线程安全的。非常多人会用到synchronizedkeyword。相对与AtomicInteger这个类而言。

AtomicInteger能够用原子方式更新的
int 值。

AtomicInteger对int型加减操作的线程安全,性能上远远优越于synchronized。

这是AtomicInteger源代码中提供的所有接口方法。

构造方法摘要



AtomicInteger() 

           创建具有初始值 0 的新 AtomicInteger。 

AtomicInteger(int initialValue) 

           创建具有给定初始值的新 AtomicInteger。 



方法摘要



 int addAndGet(int delta) 

           以原子方式将给定值与当前值相加。 

 boolean compareAndSet(int expect, int update) 

           假设当前值 == 预期值。则以原子方式将该值设置为给定的更新值。 

 int decrementAndGet() 

           以原子方式将当前值减 1。 

 double doubleValue() 

           以 double 形式返回指定的数值。

float floatValue() 

           以 float 形式返回指定的数值。 

 int get() 

           获取当前值。 

 int getAndAdd(int delta) 

           以原子方式将给定值与当前值相加。

int getAndDecrement() 

           以原子方式将当前值减 1。

int getAndIncrement() 

           以原子方式将当前值加 1。 

 int getAndSet(int newValue) 

           以原子方式设置为给定值,并返回旧值。 

 int incrementAndGet() 

           以原子方式将当前值加 1。 

 int intValue() 

           以 int 形式返回指定的数值。 

 void lazySet(int newValue) 

           最后设置为给定值。

long longValue() 

           以 long 形式返回指定的数值。 

 void set(int newValue) 

           设置为给定值。 

 String toString() 

           返回当前值的字符串表示形式。

boolean weakCompareAndSet(int expect, int update) 

           假设当前值 == 预期值,则以原子方式将该设置为给定的更新值。

以下贴一个简单的样例:

class Counter {
private volatile int count = 0;

public synchronized void increment() {
count++;  //若要线程安全运行运行count++,须要加锁
}

public int getCount() {
return count;
}
}

class Counter {
private AtomicInteger count = new AtomicInteger(); 

public void increment() {
count.incrementAndGet();
}
 //使用AtomicInteger之后,不须要加锁。也能够实现线程安全。

public int getCount() {
return count.get();
}
}

AtomicInteger类的更多相关文章

  1. AtomicInteger类的理解及使用

    AtomicInteger在多线程并发场景的使用 AtomicInteger提供原子操作来进行Integer的使用,因此十分适合高并发情况下的使用. AtomicInteger位于包package j ...

  2. AtomicInteger类的理解与使用

    AtomicInteger类的理解与使用 首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下: public class Sample1 { private stati ...

  3. AtomicInteger类和int原生类型自增鲜明的对比

      AtomicInteger这个类的存在是为了满足在高并发的情况下,原生的整形数值自增线程不安全的问题.比如说 int i = 0 ; i++; 上面的写法是线程不安全的. 有的人可能会说了,可以使 ...

  4. 随意看看AtomicInteger类和CAS

    最近在读jdk源码,怎么说呢?感觉收获还行,比看框架源码舒服多了,一些以前就感觉很模糊的概念和一些类的用法也清楚了好多,举个很简单的例子,我在读Integer类的时候,发现了原来这个类自带缓存,看看如 ...

  5. Java AtomicInteger类的使用方法详解_java - JAVA

    文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 首先看两段代码,一段是Integer的,一段是AtomicInteger的,为以下: public class Samp ...

  6. AtomicInteger类保证线程安全的用法

    J2SE 5.0提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值(更新)操作 ...

  7. AtomicInteger类的使用

    AtomicInteger介绍 AtomicInteger是一个提供原子操作的Integer类,通过线程安全的方式操作加减. AtomicInteger使用场景 AtomicInteger提供原子操作 ...

  8. AtomicInteger类的简单应用

    AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicIn ...

  9. 多线程爬坑之路-J.U.C.atomic包下的AtomicInteger,AtomicLong等类的源码解析

    Atomic原子类:为基本类型的封装类Boolean,Integer,Long,对象引用等提供原子操作. 一.Atomic包下的所有类如下表: 类摘要 AtomicBoolean 可以用原子方式更新的 ...

随机推荐

  1. Unity C# 关于设计模式的思考

    一.当你的项目发现有如下问题之一时,就需要考虑重构代码,可能会有某种模式适合. 1.代码无法进行单元测试. 2.需求的变动总是导致代码的变动. 3.有重复代码的存在. 4.继承层次过多. 5.隐藏的依 ...

  2. 08-for循环

  3. Spring Cloud学习笔记【五】Hystrix Dashboard监控面板

    ystrix除了隔离依赖服务的调用以外,Hystrix 还提供了准实时的调用监控(Hystrix Dashboard),Hystrix 会持续地记录所有通过 Hystrix 发起的请求的执行信息,并以 ...

  4. 优化数据页面(20)——1:n的数据关系

    设计要点:优化数据页面.界面设计.美化exce 阿金:那一对多的关系-- 秀秀:不是:n结构么? 阿金:嗯,这俺知道.俺特别喜欢这样的格式,那样显得非常上档次! 秀秀:俺也喜欢. 由于页面上有空白,认 ...

  5. 在Fedora18上配置个人的Hadoop开发环境

    在Fedora18上配置个人的Hadoop开发环境 1.    背景 文章中讲述了类似于"personalcondor"的一种"personal hadoop" ...

  6. tp5项目搭建思路

    按照需求,创建主体的目录结构,一般包括管理后台admin,前台展示index,app接口api. admin中又包含controller,model,view,其他等等. 一些js,css,image ...

  7. 弯道超车,换一个思路,避免addEventListener为同一个元素重复赋予事件

    addEventListener可以给同一个元素赋予多次同一个事件. 执行一次,就多一次事件效果.这不是我想要的. window.onload = function(){ var box = docu ...

  8. Docker -- 2 -- 利用docker部署网站和数据库

    在Docker – 系统整洁之道 – 1中已经对Docker的一些命令和Docker镜像的使用及操作做了记录. 这次就利用docker进行一次真正的实例使用,使用docker搭建一个简单的答题系统,这 ...

  9. js 判断对touch事件支持

    $.support = (function() { var support = { touch: !!(('ontouchstart' in window) || window.DocumentTou ...

  10. Linux 串口终端调试工具minicom

    minicom是一个串口通信工具,就像Windows下的超级终端.可用来与串口设备通信,如调试交换机和Modem等,它的使用完全依靠键盘的操作. 一.安装: Linux各发行版因软件管理方式不同而不同 ...