import java.util.Random; public class Matrix implements Runnable { static int matrixSize = 5000; static long mult = 0; static int m1[]; static int m2[]; static void init() { m1 = new int[matrixSize]; m2 = new int[matrixSize]; Random randomGenerator = new Random(); for (int i = 0; i < matrixSize; i++) { m1[i] = randomGenerator.nextInt(10); m2[i] = randomGenerator.nextInt(10); } } public static void main(String[] args) { init(); // create two threads Thread th1 = new Thread(new Matrix()); Thread th2 = new Thread(new Matrix()); // sets names th1.setName("1"); th2.setName("2"); // start threads th1.start(); th2.start(); try { // joins threads to main thread th1.join(); th2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("mult" + mult); } public void run() { if (Thread.currentThread().getName().equals("1")) { long localMult = 0; for (int i = 0; i < matrixSize / 2; i++) { localMult += m1[i] * m2[i]; } sum(localMult); } else if (Thread.currentThread().getName().equals("2")) { long localMult = 0; for (int i = matrixSize / 2; i < matrixSize; i++) { localMult += m1[i] * m2[i]; } sum(localMult); } } synchronized void sum(long amount) { // this method is synchronized because this updates global variable System.out.println("Sum " + amount); mult += amount; } }
Friday, June 10, 2011
Multiply two arrays using two threads
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment