FutureTask基本使用
Log.d(TAG, "getResult: " + getResult());
}
private int getResult() {
int result = -1;
try {
new Thread(mTask).start();
result = mTask.get(4, TimeUnit.SECONDS);
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
} finally {
return result;
}
}
FutureTask<Integer> mTask = new FutureTask<Integer>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
Thread.sleep(2000);
return 3;
}
});
使用逻辑非常简单:
如果mTask.get一定时间内没等到call的返回值,mTask.get报异常TimeoutException,get不到值
如果call返回null,mTask.get报异常NullPointerException,get不到值