AtomicInteger的使用
JDK API 1.7相关介绍
可以用原子方式更新的 int 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicInteger 可用在应用程序中(如以原子方式增加的计数器),并且不能用于替换 Integer。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。


AtomicInteger 是线程安全的,多线程对同一个数加100次,结果一定是100. 相关代码示例:
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
import javax.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Component;
/**
* @ClassName: AtomicIntegerHandle
* @Description: AtomicInteger的使用
* @author wasim
* @create at 2015-8-12 下午8:44:51
*
*/
@Component
public class AtomicIntegerHandle {
@Autowired
ThreadPoolTaskExecutor executor;
@PostConstruct
public void handleQuestionKnowledge(){
AtomicInteger atomicInteger = new AtomicInteger();
int round = 15; //要执行的线程总数
//导出文件
executor.execute(new ExportStats(atomicInteger, round));
//导出文件前,需要先循环下面12个线程
for(int i=0;i<round;i++){
executor.execute(new similarKnowledgeHandle(atomicInteger));
}
}
public class similarKnowledgeHandle implements Runnable{
AtomicInteger atomicInteger;
public similarKnowledgeHandle(AtomicInteger atomicInteger) {
this.atomicInteger =atomicInteger;
}
@Override
public void run() {
System.out.println("do some thing....");
atomicInteger.getAndIncrement();
System.out.println(atomicInteger.get()); //显示当前计数
}
}
public class ExportStats implements Runnable{
AtomicInteger atomicInteger;
int round;
public ExportStats(AtomicInteger atomicInteger, int round) {
this.atomicInteger =atomicInteger;
this.round = round;
}
@Override
public void run() {
try {
boolean flag = true;
while(flag){
if(atomicInteger.get() == round){
flag = false;
System.out.println("预处理完成,开始执行相关...");
} else {
System.out.println("wait...");
Thread.sleep(1000);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
AtomicInteger的使用的更多相关文章
- AtomicInteger源码注释
AtomicInteger源码 在java.util.concurrent.atomic包下提供了大量的原子类,这里以AtomicInteger源码为例,添加了一些注释,个人理解,供参考: 其中比较重 ...
- java API:AtomicInteger
An int value that may be updated atomically. See the java.util.concurrent.atomic package specificati ...
- AtomicInteger
原子量和普通变量相比,主要体现在读写的线程安全上.对原子量的写是原子的,由CAS操作保证原子性.对原子量的读可以读到最新值,由volatile关键字来保证可见性. ublic class Atomic ...
- AtomicInteger简介
这个类真的非常实用,更重要的是 它确实非常简单: 附上自己的代码,可以自己试试: AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的 ...
- Java AtomicInteger
AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字.而AtomicIn ...
- AtomicInteger源码分析
问题背景 最近在看LinkedBlockingQueue看到了其中的count使用AtomicInteger修饰,之前也看过AtomicInteger的一些解释,也是似懂非懂的,今天深入的了解了其实现 ...
- AtomicInteger源码分析——基于CAS的乐观锁实现
AtomicInteger源码分析——基于CAS的乐观锁实现 1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时 ...
- AtomicInteger类保证线程安全的用法
J2SE 5.0提供了一组atomic class来帮助我们简化同步处理.基本工作原理是使用了同步synchronized的方法实现了对一个long, integer, 对象的增.减.赋值(更新)操作 ...
- java多线程之AtomicInteger
AtomicInteger原子操作实现同步 package Thread.Common; import java.util.Timer; import java.util.TimerTask; imp ...
- Java自增原子性问题(测试Volatile、AtomicInteger)
这是美团一面面试官的一个问题,后来发现这是一道面试常见题,怪自己没有准备充分:i++;在多线程环境下是否存在问题?当时回答存在,接着问,那怎么解决?...好吧,我说加锁或者synchronized同步 ...
随机推荐
- 通过Elasticsearch使用的你的数据
Elasticsearch 系列导航 elasticsearch 与 elasticsearch-head 的安装 ElasticSearch Index API && Mapping ...
- 用exe4j将jar包转成.exe文件的教程
标准版教程再这里 http://pan.baidu.com/s/1i3gn0Br 1. 下载安装exe4j文件,并把你的java文件生成jar格式的文件,在桌面新建一个文件夹,把jar文件放进去 ...
- 将1、2、3、……、n这n个连续自然数分成g组,使每组的和相等。g组中个数最多的一组有几个?
<style type="text/css"> #content { width: 600px; margin: 150px auto 0 auto; } dl dd ...
- ConcurrentHashMap总结
线程不安全的HashMap 因为多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap,如以下代码 final HashM ...
- Go-Redis
redis的client有好多好多,go语言的client在redis官方有两个推荐,radix和redigo.选择哪一个好呢?确实很纠结,后来掷硬币决定选择redigo了. redis.go.red ...
- Linux-粘滞位的使用
粘滞位(Stickybit),又称粘着位,是Unix文件系统权限的一个旗标.最常见的用法在目录上设置粘滞位, 也只能针对⽬录设置,对于⽂件⽆效.则设置了粘滞位后,只有目录内文件的所有者或者root才可 ...
- Javascript一道面试题
实现一个函数,运算结果可以满足如下预期结果: add(1)(2) // 3add(1, 2, 3)(10) // 16 add(1)(2)(3)(4)(5) // 15 function add () ...
- 【解决问题】解决python安装模块时UnicodeDecodeError
安装模块时,出现报错: UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 68: ordinal not in ...
- Roguelike元素对游戏设计的影响
Roguelike game自1980年以来,就占据着游戏市场中很大的份额,而现如今的很多游戏中,也加入了Roguelike元素来起到更好的效果.我们知道Roguelike game中有着一些看似任性 ...
- Android ViewPager动画切换
使用方法 setPageTransformer 例如: ViewPager.setPageTransformer(true, new ZoomOutPageTransformer()) package ...