android Callable Future FutureTask 解析

             最近比较公司没什么事做,闲下来,有空就写写博客吧,当是笔记什么的都好。

最近看AsyncTask的源码,看到了FutureTask ,忍不住去学习了一下,下面总结一下:

1.Callable和Future
    Callable其实和Runnable没什么不同,只是Runnable没参数返回,Callable有参数返回。而且Callable只能配合ExecutorService来在线程池里使用。

    Future表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。

    这两个东东都是配合使用额。。。。。

  代码:

class TaskWithResult implements Callable<String> {  
    private int id;  
  
    public TaskWithResult(int id) {  
        this.id = id;  
    }  
  
    @Override  
    public String call() throws Exception {  
        return "result of TaskWithResult " + id;  
    }  
}  
 ExecutorService exec = Executors.newCachedThreadPool();        ;           
 Future<String> result=exec.submit(new TaskWithResult(2));  
 Log.i("执行结果",result);
 exec.shutdown(); 

2.FutureTask 
      看源码知道,这个东西implments于Runnable和Future接口,集成了Runnable和Future的功能。这个多用于线程状态的获取,主线程可以在完成自己子线程的任务后,再去获取结果。额,这个强大好多。。。
贴贴代码:
ExecutorService executorService= Executors.newFixedThreadPool(5);//创建线程池大小为5的固定线层池
Runnable runnable=new WorkThreadRunnable(1);
FutureTask futureTask=new FutureTask(runnable,"测试结果");
   executorService.execute(futureTask);
   sleep(3000);     
   try {
        String result= (String) futureTask.get();//设定返回的结果为字符串
        Log.e("执行结果",result+""); //打印可以看到为"测试结果"
        Log.e("futureTask", futureTask.isDone()+futureTask.isCancelled());//打印线程执行状态
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }
private class WorkThreadRunnable implements Runnable {
private int i;
public WorkThreadRunnable(int i){
this.i=i;
    }
@Override
public void run() {
         Log.e("WorkThread", "在执行第" + i + "线程");
         sleep(1000*i);
    }
}
private void sleep(int time){
try {
        Thread.sleep(time);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
FutureTask还有一种实例化:FutureTask futureTask=new FutureTask(Callable callable);这个是差不多的,只不过把返回结果塞在了Callable里面的方法返回而已。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值