Spring MVC异步处理-Future模式

Furture模式

Future模式.png
  • 主线程开启一个子线程,子线程在处理一个非常耗时的任务,主线程就会立即返回一个Future对象。这个Future对象有一个成员变量result,子线程和主线程共享这个Future对象。
  • 如果主线程,在子线程没有处理业务之前调用Future.getResult方法,则会发生阻塞。而子线程处理业务完成之后,会执行Future.setResult方法,此时Future对象的锁属于子线程。子线程执行setResult完毕之后,则会释放锁,同时会通知刚才的等待的主线程。主线程重新获得锁,执行getResult方法。从而获取子线程执行的结果result。
  • 对于Future对象,只是一个代理真实数据的对象。而真实的数据为其成员变量result。子线程负责set真实数据,而主线程负责get真实数据。
  • 在java多线程编程中,使用Callable<T>接口实现任务的执行。
public class TestThread {    
      public static void main(String[] args){        
                  ExecutorService executorService = Executors.newFixedThreadPool(10); 
                  //开启一个子线程,立即返回       
                  Future<String> result = executorService.submit(new CustomTask()); 
                  //主线程阻塞,一直等待子线程返回真实的响应数据   
                  System.out.println(result.getResult());
                  executorService.shutdown();    
      }
}
class CustomTask implements Callable<String>{    
        public String call() throws Exception {        
                 Thread.sleep(10000);        
                 System.out.println(Thread.currentThread());        
                 return "complete task";    
            }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java8张图 11、字符串不变性 12、equals()方法、hashCode()方法的区别 13、...
    Miley_MOJIE阅读 3,744评论 0 11
  • 一.线程安全性 线程安全是建立在对于对象状态访问操作进行管理,特别是对共享的与可变的状态的访问 解释下上面的话: ...
    黄大大吃不胖阅读 878评论 0 3
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,376评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,001评论 19 139
  • 为支持落地配业务中,分拣中心统一揽收、统一分配的需求,单独开发了落地配揽收模块。 支持在分拨中心流水线上,一次扫描...
    快服务当日达阅读 528评论 0 0