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();
}
}
運行結果: