Monday, October 1, 2012

Alternating execution of threads in java

Have you ever come across a need to execute two threads alternately? well to be truthful i never had the need, but this idea just came up and i decided to actually write the code that could make this happen. In the code below i intentionally inserted a this.sleep(1000); to clearly show that the threads do in fact execute the way intended.
public class AltThread {

 public static void main(String[] args) {

  Q ob = new Q();

  new thread1(ob);
  new thread2(ob); 
  
 }
}

class thread1 extends Thread {

 Q ob;
 
 thread1(Q ob) {
  this.ob = ob;
  this.start();
 }

 public void run() {
  while (true) {
   ob.one();
  }
 }
}

class thread2 extends Thread {

 Q ob;
 
 thread2(Q ob) {
  this.ob = ob;
  this.start();
 }

 public void run() {
  while (true) {
   ob.two();
   try {
    this.sleep(1000);
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 }
}


class Q{
 
 static  boolean toggle = false; 
 
 public synchronized void one(){
  while(!toggle){
   try {
    wait();
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  toggle = false;
  notify();
  System.out.println("One"); 
 }
 
 public synchronized void two(){
  while(toggle){
   try {
    wait();
   } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  toggle = true;
  notify();
  
  System.out.println("Two");
 } 
}

No comments:

Post a Comment