Saturday, 11 January 2014

Advanced Java_ Multi-threading Part 4 -- Multiple Locks; Using Synchronized Code Blocks


==
package Demo6;
/**
 * Title -- Advanced Java_ Multi-threading Part 4 -- Multiple Locks; Using Synchronized Code Blocks
 * Note:-- 
 * @author Dharmaraj.Net
 */
public class App {

 public static void main(String[] args) {
  new Worker().main();
 }

}
===
package Demo6;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Worker {

 private List<Integer> list1 = new ArrayList<Integer>();
 private List<Integer> list2 = new ArrayList<Integer>();

 private Object lock1 = new Object();
 private Object lock2 = new Object();

 private Random random = new Random();

 public void main() {
  System.out.println("Starting.....");

  long start = System.currentTimeMillis();
  // process();

  Thread t1 = new Thread(new Runnable() {
   public void run() {
    process();
   }
  });
  t1.start();

  Thread t2 = new Thread(new Runnable() {
   public void run() {
    process();
   }
  });
  t2.start();

  try {
   t1.join();
   t2.join();
  } catch (InterruptedException e) {
   e.printStackTrace();
  }

  long end = System.currentTimeMillis();

  System.out.println("Time taken..." + (end - start));
  System.out.println("Liat 1" + list1.size());
  System.out.println("Liat 1" + list2.size());
 }

 public void stageOne() {
  synchronized (lock1) {
   try {
    Thread.sleep(1);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   list1.add(random.nextInt(100));
  }
 }

 public void stageTwo() {
  synchronized (lock2) {
   try {
    Thread.sleep(1);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   list2.add(random.nextInt(100));
  }
 }

 public void process() {
  for (int i = 0; i < 1000; i++) {
   stageOne();
   stageTwo();
  }
 }

}
=== 

No comments:

Post a Comment