import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Fibonacci {
private static long[] value;
public static void main(String args[]) throws InterruptedException {
int n;
try {
n = Integer.parseInt(args[0]);
} catch (Exception e) {
throw new RuntimeException(" number n");
}
value = new long[n + 1];
long start = System.nanoTime();
System.out.print("Dynamic Programming = " + fibon(n));
long end = System.nanoTime();
System.out.println("\t time = " + (end - start) + "ns");
start = System.nanoTime();
System.out.print("Sequence = " + Sequence(n));
end = System.nanoTime();
System.out.println("\t time = " + (end - start) + "ns");
start = System.nanoTime();
//int nThreads = Runtime.getRuntime().availableProcessors();
int nThreads = 30;
ExecutorService executorService = Executors
.newFixedThreadPool(nThreads);
int result;
try {
result = fibonacciSum(n, executorService); }
catch (ExecutionException e) {
throw new RuntimeException("Thread Interuppted "); }
System.out.print(" MultiThreading = " + result);
end = System.nanoTime();
System.out.println("\t time = " + (end - start) + "ns");
}
public static long fibon(int n) {
value[0] = 1;
value[1] = 1;
if (n <= 2)
return 1;
else if (value[n - 1] != 0)
return value[n];
for (int j = 2; j <= n; j++) {
value[j] = fibon(j - 2) + fibon(j - 1); }
return value[n];
}
public static long Sequence(int n) {
if (n <= 2)
return 1;
else
return (Sequence(n - 1) + Sequence(n - 2));
}
private static class FibonacciThread implements Runnable {
int index;
int result;
ExecutorService executorService;
public FibonacciThread(int index) {
this.index = index;
}
public void run() {
try {
this.result = fibonacciSum(index, executorService);
} catch (Exception e) {
throw new RuntimeException("Thread interupted");
}
}
}
private static int fibonacciSum(int index, ExecutorService executorService)
throws InterruptedException, ExecutionException {
if (index == 1 || index == 2) {
return 1;
} else {
FibonacciThread fibonacciThread1 = new FibonacciThread(index - 2);
fibonacciThread1.executorService=executorService;
Future future = executorService.submit(fibonacciThread1);
Object object = future.get();
int resultPart2 = fibonacciSum(index - 1, executorService);
int result = fibonacciThread1.result + resultPart2;
//executorService.shutdown();
return result;
}
}
}
위의 코드를 실행 한 후에이 오류가 발생합니다. 스레드에서다음 코드 "예외 스레드"주 "java.lang.RuntimeException"을 실행 한 후에이 오류가 발생합니다. 어떻게 해결할 수 있습니까?
는예외 "주요"java.lang.RuntimeException가 : Fibonacci.main (Fibonacci.java:16)의 수 n
방법이 문제를 해결하는 방법을 가르쳐주세요. 이 프로그램은 다음과 같이 동작합니다 : 명령 줄에서 사용자가 프로그램이 생성 할 피보나치 숫자의 수를 입력합니다. 그러면 프로그램은 피보나치 숫자를 생성 할 별도의 스레드를 생성하여 스레드가 공유 할 수있는 데이터에 시퀀스를 배치합니다 (배열은 아마도 가장 편리한 데이터 구조입니다).
당신은'자바 피보나치'그렇지 않으면 당신은 의지와 프로그램을 실행했는지 확인을 생성하는 것입니다 피보나치 수의 정수이어야합니다 다음 명령을 사용하여 프로그램이 하나의 인수를 제외하고이 예외가 발생합니다 –
어떻게 프로그램을 실행합니까? BTW 당신은''RuntimeException ("number n");을 던질 것이라고 생각합니까? – talex
예제 코드를 [mcve]로 줄이십시오. 최소의 코드는 타이밍 루틴을 포함하지 않아야한다. –