Let's try the latest sample with another beauty of the java.util.concurrent package :ReentrantReadWriteLock
import java.util.concurrent.locks.*;
public class ReentrantReadWriteLockExample {
int i = 0;
public static void main (String[] args) {
final ReentrantReadWriteLockExample example = new ReentrantReadWriteLockExample();
final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
final Runnable r = new Runnable () {
public void run () {
while (true) {
try {
lock.writeLock().lock();
//Here is the critical section jobs are being done securely..
example.printSomething ();
Thread.sleep (1000);
lock.writeLock().unlock();
} catch (Exception ex) {
System.out.println (" -- Interrupted...");
ex.printStackTrace ();
}
}
}
};
new Thread (r).start ();
new Thread (r).start ();
new Thread (r).start ();
}
public void printSomething (){
i++;
System.out.println (" -- current value of the i :"+ i);
}
}
