How to find nth terms in the fibonacci series using Multithreads and BigInteger datatype

This is the third solution to find the ‘nth terms’ in the fibonacci series using BigInteger data type. This program uses the Multithreads concept to find the more than one ‘nth terms’ in the fibonacci series in parallel to save the time.

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;

public class UsingMultithreadsToFindNthFibNumber {

	public static void main(String args[]) throws InterruptedException {
       
        // Initialize array List of numbers, to find the nth Fibonacci of each number.
        //300th Fibonacci number, 250th Fibonacci number etc..
		List<Integer> numList = new ArrayList<Integer>();
		numList.add(300);
		numList.add(250);
		numList.add(200);
		numList.add(120);
		numList.add(20);
		numList.add(90);
		numList.add(70);
		numList.add(15);

		List<FibonacciThread> threads = new ArrayList<FibonacciThread>();

		// Initializing FibonacciThreads using the nth term values
		for (int nthNum : numList) {
			threads.add(new FibonacciThread(nthNum));
		}

		// Starting all the threads here
		for (Thread thread : threads) {
			thread.start();
		}

		// Traversing all the threads checking for isAlive ()
		int completedThreadsCount = 0; // counter to track threads completion
		while (true) {
			for (int i = 0; i < numList.size(); i++) {

				FibonacciThread fibonacciThread = threads.get(i);
				if (!fibonacciThread.isAlive()) {
					System.out.println(numList.get(i) + "th Fibonacci number is=" + fibonacciThread.retResult());
					completedThreadsCount++;
				} else
					System.out
					.println(threads.get(i) + " Evaluating " + numList.get(i) + "th Fibonacci is in Progress");

				if (completedThreadsCount == numList.size())
					System.exit(0);
			}
		}
	}

	public static class FibonacciThread extends Thread {

		private int numVal;
		private BigInteger result;

		/*
		 * Initialize the constructor with the given nthNumber, during thread objects
		 * creation
		 */
		FibonacciThread(int nthNum) {
			this.numVal = nthNum;
		}

		// This is the run() method called implicitly when the thread started
		public void run() {
			result = NthFibonacci(numVal);
		}

		private BigInteger NthFibonacci(int nthNum) {

			BigInteger[] fib = new BigInteger[nthNum + 2];
			// Initialize the first two values in the Fibonacci series
			fib[0] = BigInteger.ZERO;
			fib[1] = BigInteger.ONE;

			// Evaluate each term in the series until the nthNum
			for (int i = 2; i <= nthNum; i++)
				fib[i] = fib[i - 1].add(fib[i - 2]);
			return fib[nthNum];
		}

		// Method to return the evaluated answer
		private BigInteger retResult() {
			return result;
		}
	}
}
OUTPUT-
Thread[Thread-0,5,main] Evaluating 300th Fibonacci is in Progress
Thread[Thread-1,5,main] Evaluating 250th Fibonacci is in Progress
Thread[Thread-2,5,main] Evaluating 200th Fibonacci is in Progress
Thread[Thread-3,5,main] Evaluating 120th Fibonacci is in Progress
Thread[Thread-4,5,main] Evaluating 20th Fibonacci is in Progress
Thread[Thread-5,5,main] Evaluating 90th Fibonacci is in Progress
Thread[Thread-6,5,main] Evaluating 70th Fibonacci is in Progress
Thread[Thread-7,5,main] Evaluating 15th Fibonacci is in Progress
Thread[Thread-0,5,main] Evaluating 300th Fibonacci is in Progress
Thread[Thread-1,5,main] Evaluating 250th Fibonacci is in Progress
Thread[Thread-2,5,main] Evaluating 200th Fibonacci is in Progress
Thread[Thread-3,5,main] Evaluating 120th Fibonacci is in Progress
Thread[Thread-4,5,main] Evaluating 20th Fibonacci is in Progress
Thread[Thread-5,5,main] Evaluating 90th Fibonacci is in Progress
Thread[Thread-6,5,main] Evaluating 70th Fibonacci is in Progress
Thread[Thread-7,5,main] Evaluating 15th Fibonacci is in Progress
Thread[Thread-0,5,main] Evaluating 300th Fibonacci is in Progress
Thread[Thread-1,5,main] Evaluating 250th Fibonacci is in Progress
Thread[Thread-2,5,main] Evaluating 200th Fibonacci is in Progress
Thread[Thread-3,5,main] Evaluating 120th Fibonacci is in Progress
Thread[Thread-4,5,main] Evaluating 20th Fibonacci is in Progress
Thread[Thread-5,5,main] Evaluating 90th Fibonacci is in Progress
Thread[Thread-6,5,main] Evaluating 70th Fibonacci is in Progress
Thread[Thread-7,5,main] Evaluating 15th Fibonacci is in Progress
Thread[Thread-0,5,main] Evaluating 300th Fibonacci is in Progress
Thread[Thread-1,5,main] Evaluating 250th Fibonacci is in Progress
Thread[Thread-2,5,main] Evaluating 200th Fibonacci is in Progress
120th Fibonacci number is=5358359254990966640871840
20th Fibonacci number is=6765
90th Fibonacci number is=2880067194370816120
70th Fibonacci number is=190392490709135
15th Fibonacci number is=610
300th Fibonacci number is=222232244629420445529739893461909967206666939096499764990979600
250th Fibonacci number is=7896325826131730509282738943634332893686268675876375
200th Fibonacci number is=280571172992510140037611932413038677189525