1. Runnable
public class ThreadFibonacci implements Runnable {
public static void main(String args[]){
Thread t = new Thread(new ThreadFibonacci(18));
t.start();
}
public ThreadFibonacci(int i){
this.num = i;
}
@Override
public void run() {
for(int i = 0; i < num; i++){
System.out.print(next() + " ");
}
}
private int num = 0;
private int count = 0;
public Integer next() {
return fib(count++);
}
private int fib(int n) {
if (n < 2)
return 1;
return fib(n - 2) + fib(n - 1);
}
}
2. Callable
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class CallableFibonacci implements Callable<Integer> {
public static void main(String args[]) throws InterruptedException, ExecutionException {
ExecutorService es = Executors.newCachedThreadPool();
List<Future<Integer>> results = new ArrayList<Future<Integer>>();
for(int i = 0; i < 18; i++){
results.add(es.submit(new CallableFibonacci(i)));
}
for(Future<Integer> fi : results){
System.out.println(fi.get());
}
}
public CallableFibonacci(int i) {
this.count = i;
}
private int count = 0;
public Integer next() {
return fib(count++);
}
private int fib(int n) {
if (n < 2)
return 1;
return fib(n - 2) + fib(n - 1);
}
@Override
public Integer call() throws Exception {
return next();
}
}