今天写代码。尝试使用了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. BZOJ 2724 [Violet 6]蒲公英(分块)

    题意 在线区间众数 思路 预处理出 f[i][j] 即从第 i 块到第 j 块的答案.对于每个询问,中间的整块直接用预处理出的,两端的 sqrtn 级别的数暴力做,用二分查找它们出现的次数.每次询问的 ...

  2. Linux学习,部署django项目到服务器,及安装python,uwsgi等

    开启网络 vi /etc/sysconfig/network-script/ifcfg-eth0 onboot=yes 退出保存 service network restart ping www.ba ...

  3. caioj 1067动态规划入门(一维一边推5: 乘积最大(高精度版))

    因为这里涉及到乘号的个数,那么我们可以用f[i][j]表示前i个位乘号为j个时的最大乘积 那么相比上一题就是多了一层枚举多少个乘号的循环,可以得出 f[i][r] = max(f[j - 1][r - ...

  4. 紫书 习题 10-4 UVa 1644(素数筛)

    素数筛没什么好说的 #include<cstdio> #include<vector> #include<cstring> #define REP(i, a, b) ...

  5. Unity 框架(一)

    当项目需求中,后期可能接入多种输入设备的时候,可以借鉴一下以下代码 using System.Collections; using System.Collections.Generic; using ...

  6. 各大IT企业招聘所须要求技能

    1.中兴 ZTE 软件研发project师 工作地点:西安.深圳.上海.天津 主要职责: 1.从事通讯产品相关软件开发 2.进行软件具体设计,代码编写.单元測试.集成測试.系统測试等 3.进行软件代码 ...

  7. [Poi] Build a Vue App with Poi

    Poi uses the Vue babel presets by default, so there is no additional install required to get up-and- ...

  8. Android插件实例——360 DroidPlugin具体解释

    在中国找到钱不难,但你的一个点子不意味着是一个创业.你谈一个再好的想法,比方我今天谈一个创意说,新浪为什么不收购GOOGLE呢?这个创意非常好.新浪一收购GOOGLE.是不是新浪就变成老大了?你从哪儿 ...

  9. OpenCASCADE Incremental Mesh

    OpenCASCADE Incremental Mesh eryar@163.com Abstract. OpenCASCADE IncrementalMesh is used to build th ...

  10. 当我们谈论Erlang Maps时,我们谈论什么 Part 1

         Erlang 添加 Maps数据类型并非非常突然,由于这个提议已经进行了2~3年之久,仅仅只是Joe Armstrong老爷子近期一篇文章Big changes to Erlang掀起不小了 ...