package cn.itcast.write;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class FutureAndCall {
/**
* Callable与Runnable类似
* call方法和run方法
*
* Future 获取结果异常
*/
public static void main(String[] args) {
//1---------------------------------
ExecutorService threadPool = Executors.newSingleThreadExecutor();
Future<String> future = threadPool.submit(new Callable<String>() {
@Override
public String call() throws Exception {
return "200";
}
});
try {
System.out.println(future.get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
threadPool.shutdownNow();
//2---------------------------------
CallableTask task1 = new CallableTask(1);
CallableTask task2 = new CallableTask(2);
CallableTask task3 = new CallableTask(3);
try {
ExecutorService threadPool1= Executors.newFixedThreadPool(3);
Future<Integer> f1 = threadPool1.submit(task1);
System.out.println(f1.get());
Future<Integer> f2 = threadPool1.submit(task2);
System.out.println(f2.get());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
f2.cancel(true);
Future<Integer> f3 = threadPool1.submit(task3);
System.out.println(f3.get());
threadPool1.shutdownNow();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ExecutionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
class CallableTask implements Callable<Integer>{
private int data;
public CallableTask(int data){
this.data = data;
}
@Override
public Integer call() throws Exception {
if (data == 1) {
return 1;
}
if (data == 2) {
while(true){
System.out.println("2222");
Thread.sleep(1000);
return 2;
}
}
if (data == 3) {
/*try {
throw new Throwable();
} catch (Throwable e) {
e.printStackTrace();
}*/
}
return null;
}
}