zoukankan      html  css  js  c++  java
  • 测试AtomicInteger的可见性、有序性、原子性

    package com.dwz.atomic;
    
    import java.util.Collections;
    import java.util.HashSet;
    import java.util.Set;
    import java.util.concurrent.atomic.AtomicInteger;
    /**
     * AtomicInteger
     * 可见性
     * 有序性
     * 原子性
     */
    public class AtomicIntegerTest {
        public static void main(String[] args) throws InterruptedException {
            Set<Integer> set = Collections.synchronizedSet(new HashSet<Integer>());
            AtomicInteger value = new AtomicInteger();
            Thread t1 = new Thread() {
                @Override
                public void run() {
                    int x = 0;
                    while(x < 500) {
                        int v = value.getAndIncrement();
                        set.add(v);
                        System.out.println(Thread.currentThread().getName() + ":" + v);
                        x++;
                    }
                }
            };
            
            Thread t2 = new Thread() {
                @Override
                public void run() {
                    int x = 0;
                    while(x < 500) {
                        int v = value.getAndIncrement();
                        set.add(v);
                        System.out.println(Thread.currentThread().getName() + ":" + v);
                        x++;
                    }
                }
            };
            
            Thread t3 = new Thread() {
                @Override
                public void run() {
                    int x = 0;
                    while(x < 500) {
                        int v = value.getAndIncrement();
                        set.add(v);
                        System.out.println(Thread.currentThread().getName() + ":" + v);
                        x++;
                    }
                }
            };
            
            t1.start();
            t2.start();
            t3.start();
            
            t1.join();
            t2.join();
            t3.join();
            
            System.out.println(set.size());
        }
    }

     总结:

    1.volatile修饰的变量可以保证可见性和有序性
    2.CAS算法,也就是CPU级别的同步指令,相当于乐观锁,它可以测到其他线程对共享数据的变化情况

  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/zheaven/p/12981777.html
Copyright © 2011-2022 走看看