Source Code : Fibonacci: producer and consumer
Java Is Open Source Programming Language You Can Download From Java and Java Libraries From http://www.oracle.com.
Click Here to download
We provide this code related to title for you to solve your developing problem easily. Libraries which is import in this program you can download from http://www.oracle.com.
Click Here or search from google with Libraries Name you get jar file related it
Fibonacci: producer and consumer

/*
Java Threads, 3rd Edition
By Scott Oaks, Henry Wong
3rd Edition September 2004
ISBN: 0-596-00782-5
*/
import java.util.*;
import java.util.concurrent.*;
public class FibonacciTest {
public static void main(String[] args) {
ArrayBlockingQueue<Integer> queue;
queue = new ArrayBlockingQueue<Integer>(10);
new FibonacciProducer(queue);
int nThreads = Integer.parseInt(args[0]);
for (int i = 0; i < nThreads; i++)
new FibonacciConsumer(queue);
}
}
class Fibonacci {
private ConcurrentMap<Integer, Integer> values =
new ConcurrentHashMap<Integer, Integer>();
public int calculate(int x) {
if (x < 0)
throw new IllegalArgumentException("positive numbers only");
if (x <= 1)
return x;
return calculate(x-1) + calculate(x-2);
}
public int calculateWithCache(int x) {
Integer key = new Integer(x);
Integer result = values.get(key);
if (result == null) {
result = new Integer(calculate(x));
values.putIfAbsent(key, result);
}
return result.intValue();
}
public int calculateOnlyWithCache(int x) {
Integer v1 = values.get(new Integer(x-1));
Integer v2 = values.get(new Integer(x-2));
Integer key = new Integer(x);
Integer result = values.get(key);
if (result != null)
return result.intValue();
if ((v1 == null) || (v2 == null))
throw new IllegalArgumentException("values not in cache");
result = new Integer(v1.intValue() + v2.intValue());
values.putIfAbsent(key, result);
return result.intValue();
}
public void calculateRangeInCache(int x, int y) {
calculateWithCache(x++);
calculateWithCache(x++);
while (x <= y) {
calculateOnlyWithCache(x++);
}
}
}
class FibonacciProducer implements Runnable {
private Thread thr;
private BlockingQueue<Integer> queue;
public FibonacciProducer(BlockingQueue<Integer> q) {
queue = q;
thr = new Thread(this);
thr.start();
}
public void run() {
try {
for(int x=0;;x++) {
Thread.sleep(1000);
queue.put(new Integer(x));
System.out.println("Produced request " + x);
}
} catch (InterruptedException ex) {
}
}
}
class FibonacciConsumer implements Runnable {
private Fibonacci fib = new Fibonacci();
private Thread thr;
private BlockingQueue<Integer> queue;
public FibonacciConsumer(BlockingQueue<Integer> q) {
queue = q;
thr = new Thread(this);
thr.start();
}
public void run() {
int request, result;
try {
while (true) {
request = queue.take().intValue();
result = fib.calculateWithCache(request);
System.out.println("Calculated result of " + result + " from " + request);
}
} catch (InterruptedException ex) {
}
}
}
Thank with us