Lab 1 Solutions

Solution to Question 4 - the Array Sum problem

You will need all the three classes below for compiling and running

//ArraySumThread.java
public class ArraySumThread extends Thread {
    private int array[];
    private int start;
    private int end;
    private int arraySum;
 
    public ArraySumThread(int _array[], int _start, int _end) {
        array = _array;
        start = _start;
        end = _end;
    }
 
    public void run() {
        arraySum = 0;
        for (int i = start; i <= end ; i++)
            arraySum = arraySum + array[i];
    }
 
    public int getArraySum() {
        return arraySum;
    }
}
//ArraySum.java
import java.util.Random;
 
public class ArraySum {
    public static void main(String args[]) {
        //create a large array of random numbers
        int array[] = new int[1000000];
        fillArray(array);
 
        //create two ArraySumThreads and pass the array and range to sum
        ArraySumThread ast1 = new ArraySumThread(array, 0, 499999);
        ArraySumThread ast2 = new ArraySumThread(array, 500000, 999999);
 
        long start = System.currentTimeMillis();
        //start the two threads
        ast1.start();
        ast2.start();
 
        try {
            ast1.join();
            ast2.join();
        } catch(InterruptedException intex) {
        }
 
        long stop = System.currentTimeMillis();
 
        int totalSum = ast1.getArraySum() + ast2.getArraySum();
        System.out.println("Total Sum="+totalSum);
        System.out.println("time taken =" + (stop - start) + " ms");
 
        SequentialArraySumThread sst = new SequentialArraySumThread(array);
        sst.start();
    }
 
    //fill the array with random numbers
    public static void fillArray(int arr[]) {
        Random r = new Random();
        for(int i = 0; i <= arr.length - 1; i++) {
            arr[i] = r.nextInt(20000);
        }
    }
 
}
//SequentialArraySumThread.java
public class SequentialArraySumThread extends Thread {
    private int m_array[];
 
    public SequentialArraySumThread(int array[]) {
        m_array = array;
    }
 
    public void run() {
        int sum = 0;
        long start = System.currentTimeMillis();
        for(int number : m_array)
            sum = sum + number;
        long stop = System.currentTimeMillis();
        System.out.println("Sum from sequential thread:"+ sum);
        System.out.println("time for sequential sum:"+ (stop - start)+ " ms");
    }
}