Java多线程之原子性 volatile、atomicInteger、synchronized测试
2017-09-30 22:25
471 查看
Java自增操作不是原子性操作,有三步:读,增,写;
AtomicInteger:一个提供原子操作的Integer的类。 一种线程安全的加减操作接口, 相比 synchroized、lock 高效.
synchroized:可以保证多线程下原子操作,不过效率低;
volatile:关键字,只能保证可见性,无法保证对变量的任何操作都是原子性的。
AtomicInteger:一个提供原子操作的Integer的类。 一种线程安全的加减操作接口, 相比 synchroized、lock 高效.
synchroized:可以保证多线程下原子操作,不过效率低;
volatile:关键字,只能保证可见性,无法保证对变量的任何操作都是原子性的。
public class IncrementTest { public static int staticCounter = 0; //non-thread-safe public static Counter synchronizedCounter = new Counter(); //synchronized public static AtomicInteger atomicInteger = new AtomicInteger(0); volatile public static int volatileCounter = 0; //volatile public static void main(String[] args) { for (int i = 0; i < 10; i++) { new Thread() { public void run() { for (int j = 0; j < 10000; j++) { staticCounter++; synchronizedCounter.increment(); atomicInteger.getAndIncrement(); volatileCounter++; } } }.start(); } while(Thread.activeCount()>1) //保证前面的线程都执行完 Thread.yield(); // try { // TimeUnit.SECONDS.sleep(5); // } catch (InterruptedException e) { // e.printStackTrace(); // } System.out.println("non-thread-safe-> static staticCounter: " + staticCounter); System.out.println("synchronized Counter: " + synchronizedCounter.getValue()); System.out.println("AtomicInteger: " + atomicInteger.intValue()); System.out.println("nonatomic-> volatileCounter: " + volatileCounter); } } class Counter { private int value; public synchronized int getValue() { return value; } public synchronized int increment() { return ++value; } public synchronized int decrement() { return --value; } }
相关文章推荐
- Java自增原子性问题(测试Volatile、AtomicInteger)
- Java自增原子性问题(测试Volatile、AtomicInteger)
- Java自增原子性问题(测试Volatile、AtomicInteger)
- volatile,Atomic ,synchronized性能和同步测试程序
- volatile关键字不具备synchronized关键字的原子性(同步),Atomic前缀修饰变量 具有原子性
- Java多线程之内存可见性和原子性:Synchronized和Volatile的比较
- 原子变量AtomicInteger (volatile深入分析 . Atomic:原子变量与原子类 .)
- volatile synchronized AtomicInteger的区别
- java原子性以及关键字volatile、synchronized
- Atomic、ThreadLocal、Volatile、synchronized总结
- 测试AtomicInteger与普通int值在多线程下的递增操作
- JUC源码分析2-原子变量-AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray
- 对于Synchronized、ReentrantLock、Atomic、CAS在并发下面的性能比较测试
- 并发编程之ThreadLocal、Volatile、synchronized、Atomic关键字扫盲
- 原子级操作 volatile和synchronized
- java多线程系类:JUC原子类:05之AtomicIntegerFieldUpdater原子类
- JUC源码分析1-原子变量-AtomicInteger/AtomicBoolean/AtomicLong/AtomicReference
- java多线程中的volatile和synchronized用法分析
- synchronized和AtomicInteger解决并发问题的性能比较
- 原子变量AtomicInteger