Sunday, 15 March 2015

java - LinkedBlockingQueue program does not terminate -



java - LinkedBlockingQueue program does not terminate -

if run next program, jvm not terminate after execution. however, if uncomment line (// newfixedthreadpool.execute(new producer3());) code, programme terminates after execution. aware because of blocking nature of queue programme not terminate. in context of below code part of code blocks termination of jvm?

public class linkedblockingqueueexample { public static void main(string[] args) { final blockingqueue<string> blockingqueue = new linkedblockingqueue<string>(5); final class producer implements runnable { @override public void run() { seek { blockingqueue.put("joshua"); blockingqueue.put("bloch"); system.out.println("put joshua in queue"); } grab (interruptedexception e) { // todo auto-generated grab block e.printstacktrace(); } } } final class producer1 implements runnable { @override public void run() { seek { blockingqueue.put("martin"); blockingqueue.put("fowler"); system.out.println("put mr fowler in queue"); } grab (interruptedexception e) { // todo auto-generated grab block e.printstacktrace(); } } } final class producer3 implements runnable { @override public void run() { seek { blockingqueue.put("malcom"); blockingqueue.put("gladwell"); system.out.println("put outlier in queue"); } grab (interruptedexception e) { // todo auto-generated grab block e.printstacktrace(); } } } final class consumer implements runnable { @override public void run() { seek { system.out.println(getclass() + " " + blockingqueue.take()); system.out.println(getclass() + " " + blockingqueue.take()); system.out.println(getclass() + " " + blockingqueue.take()); } grab (interruptedexception e) { // todo auto-generated grab block e.printstacktrace(); } } } final class consumer1 implements runnable { @override public void run() { seek { system.out.println(getclass() + " " + blockingqueue.take()); system.out.println(getclass() + " " + blockingqueue.take()); system.out.println(getclass() + " " + blockingqueue.take()); } grab (interruptedexception e) { // todo auto-generated grab block e.printstacktrace(); } } } executorservice newfixedthreadpool = executors.newfixedthreadpool(5); newfixedthreadpool.execute(new producer()); newfixedthreadpool.execute(new producer1()); // newfixedthreadpool.execute(new producer3()); newfixedthreadpool.execute(new consumer()); newfixedthreadpool.execute(new consumer1()); newfixedthreadpool.shutdown(); } }

take() phone call blocking till elements become available.. if don't want block user poll()

poll() retrieves , removes head of queue, or returns null if queue empty.

reference : http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/linkedblockingqueue.html#poll()

java collections blockingqueue

No comments:

Post a Comment