您的位置:首页 > 其它

原子操作数组类AtomicIntegerArray

2020-01-13 14:25 246 查看

    基本数据定义数组 :int [] intArray= new int[100];
    原子类型定义数组: AtomicInteger [] aiArray= new AtomicIntegre[100];
    两者所定义的形式并未不同,知识类型不同而已。
    JDK中提供了操作原子数组的类:AtomicIntegerArray
    该类的定义如下:
    AtomicIntegerArray aia = AtomicIntegerArray(100);
    也可以将一个普通的数组转化为原子数组,例如:
    AtomicIntegerArray aia = new AtomicIntegerArray(intArray);
    类AtomicIntegerArray有两个构造方法:
    1)AtomicIntegerArry(int length); //创建给定长度的数组
    2)  AtomicIntegerArray( int[] array);//创建与给定长度相同长度的新的原子类数字,并从给定数组复制其所有的元素。
    
    Demo示例:
   多个线程对同一数组进行操作,使用原子操作为数组的每一个元素增1。
    
    public class Worker extends Thread{
        AtomicIntegerArray aia;
        public Worker( String name, AtomicIntegerArray aia){
            this.aia = aia;
            setName( name );//设定线程名称
        }
        public void run(){
            for(int i=0;i<aia.length();i++){
                //该方法是以原子的方式在索引i的元素加1
                aia.incrementAndGet(i);
            }
            System.out.println(getName()+"执行完毕!");
        }    
    }
    public class Index{
        public static void main(String [] args){
            AtomicIntegerArray aia = new AtomicIntegerArray(10000);
            for(int i =0;i<10000;i++){
                aia.set(i,0);//将给定位置的元素,设置为给定的值。
            }
            System.out.println("初始化完毕!");
            Thread w1 = new Worker("工人一",aia);
            Thread w2 = new Worker("工人二",aia);
            Thread w3 = new Worker("工人三",aia);
            Thread w4 = new Worker("工人四",aia); 
            w1.start();
            w2.start();
            w3.start();
            w4.start();
            try{
                w1.join();
                w2.join();
                w3.join();
                w4.join();
            }catch(InterruptedException e){
                e.printStackTrace();
            }
            for(int i=0;i<10000;i++){
                if(aia.get(i)!=4){
                    System.out.println("验证失败!");
                    break;
                }
            }
        }
    }

  • 点赞
  • 收藏
  • 分享
  • 文章举报
dong_dong2211 发布了29 篇原创文章 · 获赞 3 · 访问量 485 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: