Java Reference
In-Depth Information
61
// create a TimeData object to store times
62
TimeData timeData =
new
TimeData();
63
64
System.out.printf(
" Calculating fibonacci(%d)%n"
, n);
65
timeData.start = Instant.now();
66
long
fibonacciValue = fibonacci(n);
67
timeData.end = Instant.now();
68
displayResult(n, fibonacciValue, timeData);
69
return
timeData;
70
}
71
72
// recursive method fibonacci; calculates nth Fibonacci number
73
private static long
fibonacci(
long
n)
74
{
75
if
(n ==
0
|| n ==
1
)
76
return
n;
77
else
78
return
fibonacci(n -
1
) + fibonacci(n -
2
);
79
}
80
81
// display fibonacci calculation result and total calculation time
82
private static void
displayResult(
int
n,
long
value, TimeData timeData)
83
{
84
System.out.printf(
" fibonacci(%d) = %d%n"
, n, value);
85
System.out.printf(
86
" Calculation time for fibonacci(%d) = %.3f seconds%n"
,
87
n, timeData.timeInSeconds());
88
}
89
90
// display fibonacci calculation result and total calculation time
91
private static double
calculateTime(TimeData result1, TimeData result2)
92
{
93
TimeData bothThreads =
new
TimeData();
94
95
// determine earlier start time
96
bothThreads.start = result1.start.compareTo(result2.start) <
0
?
97
result1.start : result2.start;
98
99
// determine later end time
100
bothThreads.end = result1.end.compareTo(result2.end) >
0
?
101
result1.end : result2.end;
102
103
return
bothThreads.timeInSeconds();
104
}
105
}
// end class FibonacciDemo
Synchronous Long Running Calculations
Calculating fibonacci(45)
fibonacci(45) = 1134903170
Calculation time for fibonacci(45) = 5.884 seconds
Calculating fibonacci(44)
fibonacci(44) = 701408733
Fig. 23.30
|
Fibonacci calculations performed synchronously and asynchronously. (Part 3 of 4.)