Java并发之Future类和Callable类详解

有时候在实际应用中,某些操作很耗时,但又不是不可或缺的步骤。比如用网页浏览器浏览新闻时,最重要的是显示文字内容,至于与新闻相匹配的图片就没有那么重要的,所以此时首先保证文字信息先显示,而图片信息会后显示,但又不能不显示,由于下载图片是一个耗时的操作,所以必须一开始就得下载。 


Java的并发库的 Future类 就可以满足这个要求。Future的重要方法包括 get()和cancel( ),get()获取数据对象,如果数据没有加载,就会阻塞直到取到数据,而  cancel()是取消数据加载。另外一个get(timeout)操作 ,表示如果在timeout时间内没有取到就失败返回,而不再阻塞。 

下面的Demo简单的说明了 Future的使用方法:一个非常耗时的操作必须一开始启动,但又不能一直等待;其他重要的事情又必须做,等完成后,就可以做不重要的事情。  
Java代码   收藏代码
  1. package concurrent;  
  2.   
  3. import java.util.concurrent.Callable;  
  4. import java.util.concurrent.ExecutionException;  
  5. import java.util.concurrent.ExecutorService;  
  6. import java.util.concurrent.Executors;  
  7. import java.util.concurrent.Future;  
  8.   
  9. public class TestFutureTask {  
  10.     public static void main(String[] args) throws InterruptedException,ExecutionException{  
  11.         final ExecutorService exec = Executors.newFixedThreadPool(5);  
  12.           
  13.         Callable call = new Callable(){  
  14.             public String call() throws Exception{  
  15.                 Thread.sleep(1000 * 5);  
  16.                 return "Other less important but longtime things.";  
  17.             }  
  18.         };  
  19.         Future task = exec.submit(call);  
  20.         //重要的事情  
  21.         Thread.sleep(1000 * 3);  
  22.         System.out.println("Let's do important things.");  
  23.         //其他不重要的事情  
  24.         String obj = (String)task.get();  
  25.         System.out.println(obj);  
  26.         //关闭线程池  
  27.         exec.shutdown();  
  28.     }  
  29. }  


运行结果: 
Java代码   收藏代码
  1. Let's do important things.  
  2. Other less important but longtime things.  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值