Deadlock using
CountDownLatch
Here
CountDownLatch initialized as 10; and there are 4 threads which are used to
reduce the count of CountDownLatch, and await () method will wait infinite to
get 0 as CountDownLatch value.
Line below
the await() method will wait infinitely to decrease the countdown value.
package com.threads;
import java.util.concurrent.CountDownLatch;
public class TestCountDownLatch extends Thread
{
public static void main(String[] args) throws InterruptedException {
performParallelTask();
}
public static void performParallelTask() throws InterruptedException
{
CountDownLatch cdl = new CountDownLatch(10);
for (int i =
0; i <
4; i++) {
Thread t = new StopLatchedThread(cdl,i);
t.start();
}
cdl.await();
// this statement will not execute because cdl.await() method
will wait
// till 0 value of CountDownLatch cdl.
System.out.println("after await method");
}
}
package com.threads;
import java.util.concurrent.CountDownLatch;
public class StopLatchedThread extends Thread
{
private final CountDownLatch stopLatch;
private int threadNo;
public StopLatchedThread(CountDownLatch stopLatch, int i) {
this.stopLatch = stopLatch;
this.threadNo = i;
}
public void run() {
try {
System.out.println("inside the run method of "+threadNo+ " thread");
} finally {
System.out.println("count down by "+threadNo+ " thread");
stopLatch.countDown();
}
}
}
Output :
inside the
run method of 0 thread
count down by
0 thread
inside the
run method of 3 thread
count down by
3 thread
inside the
run method of 2 thread
count down by
2 thread
inside the
run method of 1 thread
count down by
1 thread
No comments:
Post a Comment