concurrent
CountDownLatch example of a more general wait/notify mechanism
In this example we shall show you how to create a CountDownLatch of a more general wait/notify mechanism. We have implemented a method, that is testWaitNotify(). The steps of the method are described below:
- It creates an Object, to be the mutex.
- It creates a new Thread, that in its
run()method acquires the object, using the synchronized() statement. - Although the object is held by the thread, calling its
wait()method causes the current thread to wait until another thread invokes thejava.lang.Object.notify()method or thejava.lang.Object.notifyAll()method for this object. - Then the thread calls its start method to begin execution.
- After a second the lock of the object is acquired in the method, that uses
synchronized()statement. The thread now waits for the object to be released. - After calling
notify()method of the Object, the thread waiting for the object waits up,
as described in the code snippet below.
public void testWaitNotify() throws Exception {
final Object mutex = new Object();
Thread t = new Thread() {
public void run() {
// we must acquire the lock before waiting to be notified
synchronized(mutex) {
System.out.println("Going to wait " +
"(lock held by " + Thread.currentThread().getName() + ")");
try {
mutex.wait(); // this will release the lock to be notified (optional timeout can be supplied)
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Done waiting " +
"(lock held by " + Thread.currentThread().getName() + ")");
}
}
};
t.start(); // start her up and let her wait()
// not normally how we do things, but good enough for demonstration purposes
Thread.sleep(1000);
// we acquire the lock released by wait(), and notify()
synchronized (mutex) {
System.out.println("Going to notify " +
"(lock held by " + Thread.currentThread().getName() + ")");
mutex.notify();
System.out.println("Done notify " +
"(lock held by " + Thread.currentThread().getName() + ")");
}
}Output:
Going to wait (lock held by Thread-0) Going to notify (lock held by main) Done notify (lock held by main) Done waiting (lock held by Thread-0)
This was an example of how to create a CountDownLatch of a more general wait/notify mechanism in Java.
Related Article:
Reference: Java Concurrency Part 6 – CountDownLatch from our JCG partners at the Carfey Software blog


