/*
* Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package test.output;
import java.util.concurrent.*;
/**
* A simple test that uses {@link java.util.concurrent.ArrayBlockingQueue}.
*/
public class BlockingQueue {
public static final int MESSAGES = 5;
public static void main(String[] args) throws InterruptedException {
int messages = MESSAGES;
if (args.length > 0) {
messages = Integer.parseInt(args[0]);
}
final ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(messages);
final Consumer consumer = new Consumer(queue, messages);
final Producer producer = new Producer(queue, messages);
consumer.start();
producer.start();
consumer.join();
producer.join();
System.out.println("Done.");
}
static class Producer extends Thread {
final ArrayBlockingQueue<Integer> queue;
final int messages;
Producer(ArrayBlockingQueue<Integer> queue, int messages) {
super("Producer");
this.queue = queue;
this.messages = messages;
}
@Override
public void run() {
for (int i = 0; i < messages; i++) {
queue.add(i);
try {
Thread.sleep(20);
} catch (InterruptedException e) {
// do nothing.
}
}
}
}
static class Consumer extends Thread {
final ArrayBlockingQueue<Integer> queue;
final int messages;
Consumer(ArrayBlockingQueue<Integer> queue, int messages) {
super("Consumer");
this.queue = queue;
this.messages = messages;
}
@Override
public void run() {
for (int i = 0; i < messages; i++) {
try {
System.out.println(queue.take());
Thread.sleep(10);
} catch (InterruptedException e) {
// do nothing.
}
}
}
}
}