package a;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class Test {
public static void main(String[] args) {
getQingStorUrl();
}
private static void getQingStorUrl() {
ExecutorService executor = Executors.newSingleThreadExecutor();
FutureTask<String> future = new FutureTask<String>(new Callable<String>() {
public String call() throws Exception {
// TODO Auto-generated method stub
Test m = new Test();
return m.getValue();
}
});
executor.execute(future);
try {
String result = future.get(1, TimeUnit.SECONDS);
System.out.println(result);
} catch (InterruptedException e) {
// TODO: handle exception
System.out.println("方法执行中断");
future.cancel(true);
} catch (ExecutionException e) {
System.out.println("Excution异常");
// TODO: handle exception
future.cancel(true);
} catch (TimeoutException e) {
// TODO: handle exception
System.out.println("方法执行时间超时");
future.cancel(true);
}
System.out.println("正常");
// 关闭线程
try {
// 向学生传达“问题解答完毕后请举手示意!”
executor.shutdown();
// 等待300毫秒后中断
if(!executor.awaitTermination(300, TimeUnit.MILLISECONDS)){
// 超时的时候向线程池中所有的线程发出中断(interrupted)。
executor.shutdownNow();
}
} catch (InterruptedException e) {
// awaitTermination方法被中断的时候也中止线程池中全部的线程的执行。
System.out.println("awaitTermination interrupted: " + e);
executor.shutdownNow();
}
}
public String getValue() {
try {
// Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();// TODO: handle exception
}
return "拿到结果";
}
}