FutureTask的使用
实现Callable接口
public class MyCalbale implements Callable<String>{
@Override
public String call() throws Exception {
Log.e("emi", "MyCalbale --> call");
return "call method";
}
}
继承FutureTask类,并接受一个实现了Callable接口的类
public class MyFutureTask extends FutureTask<String>{
public MyFutureTask(Callable<String> callable) {
super(callable);
}
@Override
public void run() {
super.run();
Log.e("emo", "MyFutureTask --> run");
}
@Override
public boolean cancel(boolean mayInterruptIfRunning) {
return super.cancel(mayInterruptIfRunning);
}
@Override
protected void done() {
super.done();
Log.e("emo", "MyFutureTask --> done");
try {
Log.e("emo", "get()=" + get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
通过ThreadPoolExecutor去运行FutureTask
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
poolSize,
MAXIMUM_POOL_SIZE,
KEEP_ALIVE,
TimeUnit.SECONDS,
blockQueue,
threadFactory);
MyCalbale myCalbale = new MyCalbale();
MyFutureTask myFutureTask = new MyFutureTask(myCalbale);
/* 方法的调用顺序
* 1、先调用Callable接口中的call()方法
* 2、之后调用FutureTask类的done()方法
* 3、最后调用FutureTask类的run()方法
*/
threadPoolExecutor.execute(myFutureTask);