多线程8---volatile2---多线程间变量的可见性不具备原子性---AtomicInteger
Posted 黑土白云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程8---volatile2---多线程间变量的可见性不具备原子性---AtomicInteger相关的知识,希望对你有一定的参考价值。
1.
1 public class VolatileNoAtomic extends Thread { 2 private static volatile int count; //volatile具有线程间的变量的可见性不具备原子性 3 4 public void run(){ 5 addCount(); 6 } 7 8 private static void addCount() { 9 for(int i = 0; i< 1000; i++){ 10 count++; 11 } 12 //System.out.println(count.get()); 13 System.out.println(count); 14 } 15 16 public static void main(String[] args) { 17 VolatileNoAtomic[] atomics = new VolatileNoAtomic[10]; 18 for(int i = 0; i<10; i++){ 19 atomics[i] = new VolatileNoAtomic(); //创建10个线程 20 atomics[i].start(); //启动10个线程 21 } 22 } 23 /* 24 * 1000 25 2000 26 3047 27 4019 28 4745 29 5745 30 6745 31 7745 32 8745 33 9745 34 */ 35 }
2.
1 public class VolatileNoAtomic extends Thread { 2 // AtomicInteger 原子性 3 private static AtomicInteger count = new AtomicInteger(0); 4 public void run(){ 5 addCount(); 6 } 7 8 private static void addCount() { 9 for(int i = 0; i< 1000; i++){ 10 count.incrementAndGet(); 11 } 12 System.out.println(count.get()); 13 } 14 15 public static void main(String[] args) { 16 VolatileNoAtomic[] atomics = new VolatileNoAtomic[10]; 17 for(int i = 0; i<10; i++){ 18 atomics[i] = new VolatileNoAtomic(); //创建10个线程 19 atomics[i].start(); //启动10个线程 20 } 21 } 22 /* 23 * 1000 24 2000 25 3611 26 4796 27 5543 28 6495 29 7699 30 8000 31 9751 32 10000 33 */ 34 }
以上是关于多线程8---volatile2---多线程间变量的可见性不具备原子性---AtomicInteger的主要内容,如果未能解决你的问题,请参考以下文章
Java多线程 —— 线程安全线程同步线程间通信(含面试题集)