美文网首页
线程学习记录05-原子类型

线程学习记录05-原子类型

作者: 绝世懒人 | 来源:发表于2017-06-21 17:47 被阅读0次

有如下代码:

public class VolatitleNoAtomic extends Thread {

private static volatile int count = 0 ;

private void addCount(){
    for (int i = 0; i < 1000; i++){
        count ++ ;
    }
    System.out.println(count);
}

@Override
public void run() {
    addCount();
}

public static void main(String[] args) {
    VolatitleNoAtomic[] arr = new VolatitleNoAtomic[10];
    for (int i = 0 ; i < 10 ; i++){
        arr[i] = new VolatitleNoAtomic();
    }
    for (int i = 0 ; i < 10 ; i++){
        arr[i].start();
    }
}
}

运行结果:

image.png

这里count已然加上了volatitle关键字修饰,但是产生的数据依旧是线程不安全的。这里说明volatile只是具有可见性,但是本身不具备原子性。在不使用synchronized同步机制或其他同步机制的情况下,可以使用原子数据类型本身可以有一个比较轻量的方式。要实现原子性,建议使用Atomic系列的类

修改后的代码:

public class VolatitleNoAtomic extends Thread {

//    private static volatile int count = 0 ;
  private static AtomicInteger count = new AtomicInteger(0) ;

private void addCount(){
    for (int i = 0; i < 1000; i++){
        count.incrementAndGet();
    }

    System.out.println(count);
}

@Override
public void run() {
    addCount();
}

public static void main(String[] args) {
    VolatitleNoAtomic[] arr = new VolatitleNoAtomic[10];
    for (int i = 0 ; i < 10 ; i++){
        arr[i] = new VolatitleNoAtomic();
    }
    for (int i = 0 ; i < 10 ; i++){
        arr[i].start();
    }
}
}

运行结果:

image.png

相关文章

网友评论

      本文标题:线程学习记录05-原子类型

      本文链接:https://www.haomeiwen.com/subject/epytcxtx.html