MyThread.java 956 Bytes
Newer Older
Luca Arrotta's avatar
Luca Arrotta committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
package semaphore;

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!");
21
        wasteSomeTime(); //It takes some times to compleate the work in the critical region
Luca Arrotta's avatar
Luca Arrotta committed
22 23 24 25 26 27 28 29 30 31 32
        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