Count++不是线程安全的 不是原子性的

来源:互联网 发布:淘宝网鞋子帆布鞋 编辑:程序博客网 时间:2024/05/24 07:22
package com.bjsxt.base.sync007;import java.util.concurrent.atomic.AtomicInteger;import com.sun.org.apache.xalan.internal.xsltc.compiler.sym;/** * volatile关键字不具备synchronized关键字的原子性(同步) * @author alienware * */public class VolatileNoAtomic extends Thread{private static volatile int count;//private static AtomicInteger count = new AtomicInteger(0);private static void addCount(){for (int i = 0; i < 100000; i++) {count++ ;//count.incrementAndGet();}System.out.println(count);}public void run(){addCount();}public static void main(String[] args) {VolatileNoAtomic[] arr = new VolatileNoAtomic[100];for (int i = 0; i < 20; i++) {arr[i] = new VolatileNoAtomic();}for (int i = 0; i < 20; i++) {arr[i].start();}}}

如果count++ 满足原子性的话 最后一个值肯定是正确的

现在说的是count++是否具有原子性 所以打印出来的值可能和你预想的不太一样 如果想一样的话 必须是整个方法是加锁才行


0 0