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级别的同步指令,相当于乐观锁,它可以测到其他线程对共享数据的变化情况

  • 相关阅读:
    Math 类、Random 类、BigDecimal 类
    Redis 持久化原理及过期 key 清除策略
    MySql 存储引擎和索引
    MySql 视图、触发器以及存储过程
    布隆过滤器
    微信红包实现原理
    11-散列3 QQ帐户的申请与登陆 (25 分)
    11-散列2 Hashing (25 分)
    11-散列1 电话聊天狂人 (25 分)
    C语言实现Linux之ls
  • 原文地址:https://www.cnblogs.com/zheaven/p/12981777.html
Copyright © 2011-2022 走看看