MyThread.java 835 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
import java.util.Random;

public class MyThread extends Thread {
	private Random rnd;
	private int id;
	private Semaphore sem;
	
	MyThread(Random r, int i, Semaphore s) {
		rnd = r;
		id = i;
		sem=s;
	}
	
  public void run() {
	wasteSomeTime(); //Simulate the thread is doing something else
	System.out.println("Thread " + id + " wants to enter in the critical region");
	sem.enter();
	System.out.println("Thread " + id + " entered in the critical region!");
	wasteSomeTime(); //it takes some times to compleate the work in the critical region
	System.out.println("Thread " + id + " is going to get out from the critical region");
	sem.exit();
  }//end run
  
  private void wasteSomeTime() {
		int seconds = rnd.nextInt(10) + 1;
		try {Thread.sleep(seconds*1000);} 
		catch(Exception ex) {ex.printStackTrace();}	  
  }
} //end class