Callable和Future

来源:互联网 发布:华为云计算部门北京 编辑:程序博客网 时间:2024/05/01 20:34

多线程开发, 之前用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());    }}
0 0
原创粉丝点击