Java基础之AtomicInteger
来源:互联网 发布:诺基亚n8软件安装 编辑:程序博客网 时间:2024/05/22 03:47
我们平时所用的++a并不是线程安全的,也不是原子操作,这里的++a其实包含了三个原子操作,但是对于这样的对变量直接操作怎样才能使其安全呢?这时,我们需要使用AtomicInteger。
关于AtomicInteger,自带++操作方法,之所以安全,是因为他对变量使用了volatile关键字。
import java.util.Timer;import java.util.TimerTask;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.atomic.AtomicInteger;public class AtomicIntegerTest implements Runnable { private AtomicInteger i = new AtomicInteger(0); public int getValue() { return i.get(); } private void evenIncrement() { i.addAndGet(2); } @Override public void run() { while (true) { evenIncrement(); } } public static void main(String[] args) { //定时执行任务 new Timer().schedule(new TimerTask() { @Override public void run() { System.err.println("Aborting"); System.exit(0); } }, 5000); ExecutorService exec = Executors.newCachedThreadPool(); AtomicIntegerTest ait = new AtomicIntegerTest(); exec.execute(ait); while (true) { int val = ait.getValue(); if (val % 2 != 0) { System.out.println(val); System.exit(0); } } }}
用法如上,对着写就是了,在提个问题,下面这段代码有什么区别?
// 代码1 public class Sample { private static int count = 0; synchronized public static void increment() { count++; } } // 代码2 public class Sample { private static AtomicInteger count = new AtomicInteger(0); public static void increment() { count.getAndIncrement(); } }
3 0
- Java基础之AtomicInteger
- java volatile应用之 AtomicInteger
- Java线程之三 AtomicInteger
- java 并发之AtomicBoolean、AtomicInteger
- java AtomicInteger 源码之CAS
- Java之voliate, synchronized, AtomicInteger使用
- Java的多线程编程模型之AtomicInteger
- Java之voliate, synchronized, AtomicInteger使用
- Java之voliate, synchronized, AtomicInteger使用
- Java并发之AtomicInteger源码分析
- Java之voliate, synchronized, AtomicInteger使用
- java中Atomic类之AtomicInteger-api
- Java AtomicInteger
- java AtomicInteger
- Java AtomicInteger
- Java AtomicInteger
- Java AtomicInteger
- java基础——AtomicInteger的并发处理
- 深度学习_caffe (2) 源代码阅读顺序
- Usb Audio Device Descriptor(3) Input Terminal Descriptor
- 将MySQL数据库表结构,自动生成PDM方法
- wordpress 修改后台登陆入口(小松独创)
- bzoj1492 [NOI2007]货币兑换Cash (斜率DP+cdq分治)
- Java基础之AtomicInteger
- OpenStack能否成为下一个Linux?
- ImageLoader must be init with configuration before using
- hdu 1864 01背包
- android DiskLruCache使用方法
- Usb Audio Device Descriptor(4) Output Terminal Descriptor
- mac命令
- Oracle Database SQL Language Reference 笔记(1)—— Oracle SQL 简介
- Git 分支 - 远程分支