Perché il codice seguente non chiude dopo 1 secondo i cicli for che dal task manager vedo proseguire indisturbati?
codice:
// An example that uses a Callable.
import java.util.concurrent.*;
class Esempio {
public static void main(String args[]) {
ExecutorService es = Executors.newFixedThreadPool(3);
Future<Integer> f;
Future<Double> f2;
Future<Integer> f3;
System.out.println("Starting");
f = es.submit(new Sum(100000000));
f2 = es.submit(new Hypot(3, 4));
f3 = es.submit(new Factorial(10));
try {
System.out.println(f.get(1000, TimeUnit.MILLISECONDS));
System.out.println(f2.get(1000, TimeUnit.MILLISECONDS));
System.out.println(f3.get(1000, TimeUnit.MILLISECONDS));
} catch (InterruptedException exc) {
System.out.println(exc);
} catch (ExecutionException exc) {
System.out.println(exc);
} catch (TimeoutException exc) {
System.out.println(exc);
}
es.shutdown();
System.out.println("Done");
}
}
// Following are three computational threads.
class Sum implements Callable<Integer> {
int stop;
Sum(int v) {
stop = v;
}
public Integer call() {
int sum = 0;
long g = 0;
for (long y = 1; y <= 9_000_000_000_000_000_000L; y++) {
if (y > 10) {
g++;
} else {
g--;
}
}
for (int i = 1; i <= stop; i++) {
sum += i;
}
return sum;
}
}
class Hypot implements Callable<Double> {
double side1, side2;
Hypot(double s1, double s2) {
side1 = s1;
side2 = s2;
}
public Double call() {
long g = 0;
for (long y = 1; y <= 9_000_000_000_000_000_000L; y++) {
if (y > 10) {
g++;
} else {
g--;
}
}
return Math.sqrt((side1 * side1) + (side2 * side2));
}
}
class Factorial implements Callable<Integer> {
int stop;
Factorial(int v) {
stop = v;
}
public Integer call() {
int fact = 1;
for (int i = 2; i <= stop; i++) {
fact *= i;
long g = 0;
for (long y = 1; y <= 900_000_000L; y++) {
if (y > 10) {
g++;
} else {
g--;
}
}
}
return fact;
}
}