多线程开发, 之前用Thread, Runnable.存在的问题是:
1.Thread类和Runnable接口都不允许声明检查型异常
2.也不能定义返回值
public void run()方法契约意味着你必须捕获并处理检查型异常
Callable
public T call() throws Exception
可抛出检查型异常和定义强类型的返回值.
Future
Future是Java 1.5中引入的接口
提交一个Callable对象给线程池时,将得到一个Future对象
public class ServerAcceptingRequestsVerifier implements Callable {
/**
* @return Boolean.TRUE is server is accepting requests
* Boolean.FALSE otherwise
*/
public Boolean call() throws Exception {
Boolean isAcceptingRequests = null;
... ask server about taking requests here
return isAcceptingRequests;
}
}
public Boolean isServerTakingRequests(String server)
throws UnresponsiveException, InterruptedException {
ServerAcceptingRequestsVerifier acceptingRequestsVerifier =
new ServerAcceptingRequestsVerifier();
Future future =
THREAD_POOL.submit(acceptingRequestsVerifier);
try {
Boolean isAcceptingRequests = future.get(5, TimeUnit.SECONDS);
//waits for the thread to complete, even if it hasn't started
return isAcceptingRequests;
} catch (TimeoutException e) {
LOGGER.warn("Timed out waiting for server check thread." +
"We'll try to interrupt it.");
future.cancel(true);
return Boolean.FALSE;
} catch (ExecutionException e) {
throw new UnresponsiveException(e.getCause());
}
}