您的位置:首页 > 其它

FutureTask的使用

2015-08-02 10:26 351 查看

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() {
// 由于FutureTask实现了Runnable接口,所以这里也有一个run方法
super.run();
Log.e("emo", "MyFutureTask --> run");
}

@Override
public boolean cancel(boolean mayInterruptIfRunning) {
// 这个方式是用来取消正在执行或是为执行的FutureTask
// 已经执行完的,都返回false
return super.cancel(mayInterruptIfRunning);
}

@Override
protected void done() {
// FutureTask的任务已经执行完成
super.done();
Log.e("emo", "MyFutureTask --> done");
try {
// 同个get方法可以获取,通过执行call()方法所返回的结果
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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  FutureTask