jdk/test/java/util/concurrent/tck/AtomicIntegerArrayTest.java
changeset 41131 87edc8451f8a
parent 35394 282c3cb6a0c1
child 46146 b3e220a04d3f
equal deleted inserted replaced
41130:2004bf22423f 41131:87edc8451f8a
   301         }
   301         }
   302     }
   302     }
   303 
   303 
   304     class Counter extends CheckedRunnable {
   304     class Counter extends CheckedRunnable {
   305         final AtomicIntegerArray aa;
   305         final AtomicIntegerArray aa;
   306         volatile int counts;
   306         int decs;
   307         Counter(AtomicIntegerArray a) { aa = a; }
   307         Counter(AtomicIntegerArray a) { aa = a; }
   308         public void realRun() {
   308         public void realRun() {
   309             for (;;) {
   309             for (;;) {
   310                 boolean done = true;
   310                 boolean done = true;
   311                 for (int i = 0; i < aa.length(); i++) {
   311                 for (int i = 0; i < aa.length(); i++) {
   312                     int v = aa.get(i);
   312                     int v = aa.get(i);
   313                     assertTrue(v >= 0);
   313                     assertTrue(v >= 0);
   314                     if (v != 0) {
   314                     if (v != 0) {
   315                         done = false;
   315                         done = false;
   316                         if (aa.compareAndSet(i, v, v - 1))
   316                         if (aa.compareAndSet(i, v, v - 1))
   317                             ++counts;
   317                             decs++;
   318                     }
   318                     }
   319                 }
   319                 }
   320                 if (done)
   320                 if (done)
   321                     break;
   321                     break;
   322             }
   322             }
   332         int countdown = 10000;
   332         int countdown = 10000;
   333         for (int i = 0; i < SIZE; i++)
   333         for (int i = 0; i < SIZE; i++)
   334             aa.set(i, countdown);
   334             aa.set(i, countdown);
   335         Counter c1 = new Counter(aa);
   335         Counter c1 = new Counter(aa);
   336         Counter c2 = new Counter(aa);
   336         Counter c2 = new Counter(aa);
   337         Thread t1 = new Thread(c1);
   337         Thread t1 = newStartedThread(c1);
   338         Thread t2 = new Thread(c2);
   338         Thread t2 = newStartedThread(c2);
   339         t1.start();
       
   340         t2.start();
       
   341         t1.join();
   339         t1.join();
   342         t2.join();
   340         t2.join();
   343         assertEquals(c1.counts+c2.counts, SIZE * countdown);
   341         assertEquals(c1.decs + c2.decs, SIZE * countdown);
   344     }
   342     }
   345 
   343 
   346     /**
   344     /**
   347      * a deserialized serialized array holds same values
   345      * a deserialized serialized array holds same values
   348      */
   346      */