今天写代码。尝试使用了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();
}
}

最新文章

  1. 读书笔记--SQL必知必会16--更新和删除数据
  2. HTML meta 头部的一些内容
  3. Windows下gvim的快捷键--“冒号+w+回车”真的很累人
  4. Error writing file‘frm‘(Errcode: 28)
  5. HTML 5 中的标准属性
  6. centos7下安装vsftpd配置
  7. ylbtech-Unitity-cs:计算阶乘值
  8. JQuery基础教程:选择元素(下)
  9. BZOJ 1876 SuperGCD
  10. 反调试技术(Delphi版)
  11. .net面试问答(大汇总)
  12. iis8.0配置 使用备忘 403.14 - Forbidden Web 服务器被配置为不列出此目录的内容
  13. SQL一次查出相关类容避免长时间占用表(上)
  14. linux 上安装多个不同版本的mysql 踩的坑
  15. ES 常用的查询语句介绍
  16. SpringBoot入门教程(三)通过properties实现多个数据库环境自动切换配置
  17. vivado源文件和仿真文件的建立
  18. Centos-6.5搭建oracle11g RAC集群
  19. 内核开发知识第二讲,编写Kerner 程序中注意的问题.
  20. 利用 ImageAI 在 COCO 上学习目标检测

热门文章

  1. luoguP1419 寻找段落(二分答案+单调队列)
  2. Ubuntu命令行快捷启动Pycharm
  3. uwsgi erro
  4. caioj 1081 动态规划入门(非常规DP5:观光游览)
  5. Zookeeper入门:基本概念、5项配置、启动
  6. 题解 P2431 【正妹吃月饼】
  7. ArcGIS api for javascript——地图配置-定制导航箭头
  8. Android调用camera错误setParameters failed深层解析
  9. Java中Socket上的Read操作堵塞问题
  10. Java 开源博客 —— Solo 0.6.8 正式版发布了!