用多线程提高服务器吞吐量

为什么需要多线程提高服务器吞吐量?

web容器可以开的线程是有限,比如tomcat,如图1。

为了提高吞吐量,我们可以通过Callable执行任务,从而放出主线程,如图2。

但是大部分的时候业务逻辑比较复杂,Callable并不能完全满足我们的需求,如图3. 这时候我们就需要DeferredResult帮助我们。

Callable和Deferredresult做的是同样的事情——释放容器线程,在另一个线程上异步运行长时间的任务。

那么,DeferredResult和返回Callable有什么区别?

不同的是这一次线程是由我们管理。创建一个线程并将结果set到DeferredResult是由我们自己来做的。

用completablefuture创建一个异步任务。这将创建一个新的线程,在那里我们的长时间运行的任务将被执行。也就是在这个线程中,我们将set结果到DeferredResult并返回。

剩下的图是部分代码和结果



©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,569评论 11 349
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,267评论 19 139
  • 下面是我自己收集整理的Java线程相关的面试题,可以用它来好好准备面试。 参考文档:-《Java核心技术 卷一》-...
    阿呆变Geek阅读 15,042评论 14 507
  • Java-Review-Note——4.多线程 标签: JavaStudy PS:本来是分开三篇的,后来想想还是整...
    coder_pig阅读 5,632评论 2 17
  • 今早执勤,出门打了个滴滴直奔学校! 一上车,看着目的地是黄山实验小学,滴哥面带疑色: 你是老师? 嗯!老师也这么早...
    午后好时光阅读 1,688评论 0 7

友情链接更多精彩内容