多线程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 }
View Code

 

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 }
View Code

 

以上是关于多线程8---volatile2---多线程间变量的可见性不具备原子性---AtomicInteger的主要内容,如果未能解决你的问题,请参考以下文章

jmeter 多线程组间变量共享

线程间通信的定义及全局变量的方法

Jmeter (二十八)多线程组间变量共享

Java多线程 —— 线程安全线程同步线程间通信(含面试题集)

[多线程]C++11多线程-条件变量(std::condition_variable)

多线程之线程同步(互斥锁信号量条件变量和读写锁​)