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