原子操作数组类AtomicIntegerArray

mac2024-04-09  31

    基本数据定义数组 :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;                 }             }         }     }

最新回复(0)