今天写代码。尝试使用了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. cxf 实例解读

    1.sample 实例之一---java_first_pojo 服务端发布服务的方法: 1 HelloWorldImpl helloworldImpl = new HelloWorldImpl(); ...

  2. HDU 5373(2015多校7)-The shortest problem(模拟%11)

    题目地址:pid=5373">HDU 5373 题意:给你一个数n和操作次数t,每次操作将n的各位数之和求出来放在n的末尾形成新的n,问t次操作后得到的n能否够被11整除. 思路:就是 ...

  3. 赋值、复制构造函数和构造函数 & 异常安全的赋值

    异常安全的赋值 需要注意,复制赋值和复制构造,相兼容. 赋值时候,要带上自检查.

  4. JSP脚本连接数据库

    入门 简单的jsp文件 <%-- Created by IntelliJ IDEA. User: e550 Date: 2017/1/9 Time: 23:24 To change this t ...

  5. poj--1237--Drainage Ditches(最大流)

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %I64d & %I64u Sub ...

  6. centos7 出现please make your choice from 1 to enter..

    忘了截图了 刚出现的~~ 输入1 回车 输入q 回车 最后回车 便可以正常启动

  7. POJ 3263 差分+set判重

    题意: 思路: 对于每一个区间 [a,b] [a+1,b-1]肯定是比a,b低至少1的 因为题目要求最大值 所以就直接差分一下 搞之 (复杂度 O(n)) Discuss里说有重复的数据 用set判一 ...

  8. 如何快速复制Windows警告提示消息对话框内容

    凡是使用过计算机的朋友,都遇到过系统发出的警告提示消息对话框,如图所示. 哇!好长的一串英文错误警告,这要手写到什么时候呢?不!现在不用这么麻烦了. 你只要鼠标选中这个提示框Ctrl+C,然后打开你的 ...

  9. 分享js中 pageY = clientY + document.body.scrollTop 之间的关系

    //这里没有考虑兼容ie模式下 兼容一般主流浏览器 var $1 = document.getElementById('main') $1.onclick = function(e){ console ...

  10. chgrp---改变文件或目录所属的用户组

    chgrp命令用来改变文件或目录所属的用户组.该命令用来改变指定文件所属的用户组.其中,组名可以是用户组的id,也可以是用户组的组名.文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描 ...