import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class FutureTaskTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
long start = System.currentTimeMillis();
Callable<String> aCall = new Callable<String>() {
@Override
public String call() throws Exception {
return getA();
}
};
FutureTask<String> aFuture = new FutureTask<>(aCall);
new Thread(aFuture).start();
Callable<String> bCall = new Callable<String>() {
@Override
public String call() throws Exception {
return getB();
}
};
FutureTask<String> bFuture = new FutureTask<>(bCall);
new Thread(bFuture).start();
long end = System.currentTimeMillis();
long l = end - start;
System.out.println("main 执行时长为" + l + "-" + aFuture.get() + bFuture.get());
}
public static void main1(String[] args) {
long start = System.currentTimeMillis();
String a = getA();
String b = getB();
long end = System.currentTimeMillis();
long l = end - start;
System.out.println("main 执行时长为" + l);
}
private static String getA() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "a";
}
private static String getB() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "b";
}
}