/*
 *  This file is part of the Jikes RVM project (http://jikesrvm.org).
 *
 *  This file is licensed to You under the Common Public License (CPL);
 *  You may not use this file except in compliance with the License. You
 *  may obtain a copy of the License at
 *
 *      http://www.opensource.org/licenses/cpl1.0.php
 *
 *  See the COPYRIGHT.txt file distributed with this work for information
 *  regarding copyright ownership.
 */
public class threadTest1 {

    static final int  NUM_THREADS = 10;

    // simulate shared data
    static       int  a          = 0;
    static       int  b          = 0;

    static       int[]  aResult = new int[NUM_THREADS];
    static       int[]  bResult = new int[NUM_THREADS];

    public static void main(String[] args) {

        int xx;
        int yy;
        System.out.println(" Counter started.");

        TestThread1[] thread = new TestThread1[NUM_THREADS];

         for (int i = 0; i < NUM_THREADS; i ++) {
                         aResult[i] = 0;
                         bResult[i] = 0;
            thread[i] = new TestThread1(i);
                        thread[i].start();
         }

         System.out.println("a = " + a + ", b = " + b);

         int idx = 0;
         xx = 5;
         yy = 5;
         idx = xx - yy;
         while (idx < NUM_THREADS) {
                 while (aResult[idx] == 0) {};

                 idx ++;
         }

         for (int i = 0; i < NUM_THREADS; i ++) {
                 System.out.println("Final[" + i + "]: a = " + aResult[i] +
                                        ", b = " + bResult[i]);
         }
    }
}


// prototype of the user thread
class TestThread1 extends Thread {

    TestThread1(int id) { _tid = id;}

    public void run() {

       for (int i = 0; i < 10000; i++) {
            threadTest1.a++;
            threadTest1.b += 2;
       }

       if (_tid*2 > threadTest1.NUM_THREADS) {
         for (int i = 0; i < 10000; i++) {
            threadTest1.a++;
            threadTest1.b += 2;
         }

       }

       System.out.println("Final: [" + _tid + "]" + " a = " + threadTest1.a + ", b = " + threadTest1.b);
       threadTest1.aResult[_tid] =  threadTest1.a;
       threadTest1.bResult[_tid] =  threadTest1.b;
    }

    private int _tid;
}
