Wednesday, March 11, 2015

Java useful program



Producer Consumer Problem

public class ProducerConsumerTest 
{
   public static void main(String[] args) 
    {
      CubbyHole c = new CubbyHole();
      Producer p1 = new Producer(c, 1);
      Consumer c1 = new Consumer(c, 1);
      p1.start(); 
      c1.start();
   }
}
class CubbyHole 
 {
   private int contents;
   private boolean available = false;
   public synchronized int get() 
   {
      while (available == false) 
        {
         try 
         {
            wait();
         }
         catch (InterruptedException e){}
      }
      available = false;
      notifyAll();
      return contents;
   }
   public synchronized void put(int value) 
   {
      while (available == true) 
       {
         try 
         {
            wait();
         }
         catch (InterruptedException e) {} 
      }
      contents = value;
      available = true;
      notifyAll();
   }
}
class Consumer extends Thread 
{
   private CubbyHole cubbyhole;
   private int number;
   public Consumer(CubbyHole c, int number) 
   {
      cubbyhole = c;
      this.number = number;
   }
   public void run() 
   {
      int value = 0;
         for (int i = 0; i < 10; i++) 
         {
            value = cubbyhole.get();
            System.out.println("Consumer #" + this.number+ " got: " + value);
         }
     }
}
class Producer extends Thread 
{
private CubbyHole cubbyhole;
private int number;
public Producer(CubbyHole c, int number) 
{
cubbyhole = c;
this.number = number;
}
public void run() 
{
for (int i = 0; i < 10; i++) 
{
cubbyhole.put(i);
System.out.println("Producer #" + this.number+ " put: " + i);
try 
{
sleep((int)(Math.random() * 100));
} 
catch (InterruptedException e) { }
   }
 }
}

Setting the priority

public class Main 
{
 public static void main(String[] args) throws Exception 
{
      Thread thread1 = new Thread(new TestThread(1));
      Thread thread2 = new Thread(new TestThread(2));
      thread1.setPriority(Thread.max_priority);
      thread2.setPriority(Thread.min_priority);
      thread1.start();
      thread2.start();
      thread1.join();
      thread2.join();
      System.out.println("The priority has been set.");
   }
}

Stopping a thread

import java.util.Timer;
import java.util.TimerTask;
class CanStop extends Thread 
{
 private volatile boolean stop = false;
 private int counter = 0;
 public void run() 
{
      while (!stop && counter < 10000) 
      {
         System.out.println(counter++);
      }
      if (stop)
      System.out.println("Detected stop"); 
   }
   public void requestStop() 
  {
      stop = true;
   }
}
public class Stopping 
 {
   public static void main(String[] args) 
    {
      final CanStop stoppable = new CanStop();
      stoppable.start();
      new Timer(true).schedule(new TimerTask() 
       {
         public void run() 
         {
            System.out.println("Requesting stop");
            stoppable.requestStop();
         }
      }, 350);
   }
} 

No comments:

Post a Comment