JAVA中Future类的方法包括get()和cancel()。get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而 cancel()是取消数据加载。另外一个get(timeout)操作,表示如果在timeout时间内没有取到就失败返回,而不再塞。
代码实现:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class Test1 {
public void test() {
final ExecutorService exec = (ExecutorService) Executors.newFixedThreadPool(1);
Callable call = new Callable() {
// 放入耗时操作代码块
public Object call() throws Exception {
Thread.sleep(1001);
return "执行完成";
}
};
try {
Future future = exec.submit(call);
// 任务处理超时时间设置
String obj = (String) future.get(1000 * 1, TimeUnit.MILLISECONDS);
System.out.println("任务成功返回:" + obj);
} catch (TimeoutException ex) {
System.out.println("处理超时啦....");
System.exit(0);
} catch (Exception e) {
System.out.println("处理失败.");
e.printStackTrace();
}
// 关闭线程池
exec.shutdown();
}
public static void main(String[] args) {
new Test1().test();
}
}
运行结果: