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的使用的更多相关文章

  1. AtomicInteger源码注释

    AtomicInteger源码 在java.util.concurrent.atomic包下提供了大量的原子类,这里以AtomicInteger源码为例,添加了一些注释,个人理解,供参考: 其中比较重 ...

  2. java API:AtomicInteger

    An int value that may be updated atomically. See the java.util.concurrent.atomic package specificati ...

  3. AtomicInteger

    原子量和普通变量相比,主要体现在读写的线程安全上.对原子量的写是原子的,由CAS操作保证原子性.对原子量的读可以读到最新值,由volatile关键字来保证可见性. ublic class Atomic ...

  4. AtomicInteger简介

    这个类真的非常实用,更重要的是 它确实非常简单: 附上自己的代码,可以自己试试: AtomicInteger,一个提供原子操作的Integer的类.在Java语言中,++i和i++操作并不是线程安全的 ...

  5. Java AtomicInteger

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

  6. AtomicInteger源码分析

    问题背景 最近在看LinkedBlockingQueue看到了其中的count使用AtomicInteger修饰,之前也看过AtomicInteger的一些解释,也是似懂非懂的,今天深入的了解了其实现 ...

  7. AtomicInteger源码分析——基于CAS的乐观锁实现

    AtomicInteger源码分析——基于CAS的乐观锁实现 1. 悲观锁与乐观锁 我们都知道,cpu是时分复用的,也就是把cpu的时间片,分配给不同的thread/process轮流执行,时间片与时 ...

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

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

  9. java多线程之AtomicInteger

    AtomicInteger原子操作实现同步 package Thread.Common; import java.util.Timer; import java.util.TimerTask; imp ...

  10. Java自增原子性问题(测试Volatile、AtomicInteger)

    这是美团一面面试官的一个问题,后来发现这是一道面试常见题,怪自己没有准备充分:i++;在多线程环境下是否存在问题?当时回答存在,接着问,那怎么解决?...好吧,我说加锁或者synchronized同步 ...

随机推荐

  1. Windows入门基础:1.关于CreateWindow()函数使用中遇到的问题

    我在实现显示窗口的程序中,遇到一个问题:首先程序没有任何语法错误,编译能够通过,但是就是不能弹出窗口. 后来在MSDN中查询CreateWindow()函数,发现了下面这句话: "If lp ...

  2. 个人认为最好的Mac端的视频播放软件___movist

    http://pan.baidu.com/s/1kVm0Zmn password : y9rn 点击打开链接 http://pan.baidu.com/s/1i4ABval password :kt3 ...

  3. ado.net知识整理

    对ado.net总是半知半解,五大对象也总是混淆,近期自己做小项目练手,整理了一些知识点 ado.net的无要素(摘自其他博文) Connection 物件    Connection 对象主要是开启 ...

  4. 跟着刚哥梳理java知识点——基本数据类型(三)

    1.8种基本数据类型 1)4种整数类型(byte.short.int.long) [知识点] 类型 存储空间 数值范围 byte 1字节=8位 -128-127 short 2字节 -2的15次方-2 ...

  5. java代码开发完成后,代码走查规范

    代码走查注意事项: 1.不变的值,尽量写个常量类 2.尽量使用if{}else,不要一直if去判断 3.减少循环调用方法查询数据库 4.dao层尽量不要用逻辑,尽量在service里写业务逻辑 5.金 ...

  6. ios富文本的简单使用 AttributedString

    富文本,顾名思义就是丰富的文本格式,本文demo使用NSMutableAttributedString //获取富文本 NSMutableAttributedString*attributeStrin ...

  7. Code First约定-Fluent API配置

    转自:http://blog.163.com/m13864039250_1/blog/static/2138652482015283397609/ 用Fluent API 配置/映射属性和类型 简介 ...

  8. Caffe学习系列(四)之--训练自己的模型

    前言: 本文章记录了我将自己的数据集处理并训练的流程,帮助一些刚入门的学习者,也记录自己的成长,万事起于忽微,量变引起质变. 正文: 一.流程 1)准备数据集  2)数据转换为lmdb格式  3)计算 ...

  9. T-SQL编程语句

    书接上回 一起学习下SQL中的表连接 一般情况下咱们会使用鼠标去进行表连接操作,那针对于像我比较懒的并且眼盲的,不喜欢来回切换,咱们就用到了点T-SQL表连接语句 一般情况咱们从两个表中查出来相似的内 ...

  10. CF #299 div1 B. Tavas and Malekas KMP-next数组

    题目链接:http://codeforces.com/contest/536/problem/B 一个原始字符串,一个未知字符串,每一次从pos[i]开始覆盖未知字符串,问最后字符串的形式,以及判断过 ...