package future;

import java.util.Date;

/**

* 服务器

*

* @author wpy

*

*/

public class Service {

/**

* 1.服务器的处理某个业务,该业务可以分成AB两个过程,并且AB两个过程之间不需要彼此的返回结果

* 2.A过程需要1秒钟,B过程需要2秒钟,主线程其他操作2秒钟

*

* @param args

* @throws InterruptedException

*/

public static void main(String[] args) throws InterruptedException {

Service service = new Service();

long notUseFuture = service.notUseFuture();

System.out.println("==============================");

long useFuture = service.useFuture();

System.out.println("==============================");

System.out.println("notUseFuture整个业务耗时"+notUseFuture);

System.out.println("useFuture整个业务耗时"+useFuture);

}

public long useFuture() throws InterruptedException {

Date startOn = new Date();

String name = Thread.currentThread().getName();

final FutureDate futureDateA = new FutureDate<>();

final FutureDate futureDateB = new FutureDate<>();

Thread a = new Thread(new Runnable() {

@Override

public void run() {

String name = Thread.currentThread().getName();

System.out.println(name + ":任务A开始执行");

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

futureDateA.setData(name + ":任务A执行结果");

System.out.println(name + ":任务A执行结束");

}

}, "线程A");

Thread b = new Thread(new Runnable() {

@Override

public void run() {

String name = Thread.currentThread().getName();

System.out.println(name + ":任务B开始执行");

try {

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

futureDateB.setData(name + ":任务B执行结果");

System.out.println(name + ":任务B执行结束");

}

}, "线程B");

Date before = new Date();

a.start();

b.start();

Date after = new Date();

System.out.println(name + ":a,b阻塞主线程时间:"

+ (after.getTime() - before.getTime()));

// 假设其他业务执行两秒钟

Thread.sleep(2000);

before = new Date();

String dataA = futureDateA.getData();

after = new Date();

System.out.println(name + ":获取A线程结果时间:"

+ (after.getTime() - before.getTime()));

before = new Date();

String dataB = futureDateB.getData();

after = new Date();

System.out.println(name + ":获取线程结果时间:"

+ (after.getTime() - before.getTime()));

System.out.println(name + ":A线程结果:" + dataA);

System.out.println(name + ":B线程结果:" + dataB);

Date endOn = new Date();

/*System.out.println(name + "整个业务耗时"

+ (endOn.getTime() - startOn.getTime()));*/

return endOn.getTime() - startOn.getTime();

}

public long notUseFuture() throws InterruptedException {

Date startOn = new Date();

// 任务A

String name = Thread.currentThread().getName();

System.out.println(name + ":任务A开始执行");

Thread.sleep(1000);

System.out.println(name + ":任务A执行结束");

// 任务B

System.out.println(name + ":任务B开始执行");

Thread.sleep(3000);

System.out.println(name + ":任务B执行结束");

// 主线程其他操作

Thread.sleep(2000);

Date endOn = new Date();

return endOn.getTime() - startOn.getTime();

}

}

java多线程 future_Java多线程Future模式相关推荐

  1. Java多线程编程中Future模式的详解

    转载自 https://www.cnblogs.com/winkey4986/p/6203225.html Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker ...

  2. 学习多线程中的 Future 模式一篇文章就够了 !!!

    文章目录 一.Future 模式 二.Future模式的主要角色 三.Future模式的简单实现 四.JDK中的Future模式 五.Guava对Future模式的支持 一.Future 模式 Fut ...

  3. Java是如何实现Future模式的?万字详解!

    1 Future是什么? 先举个例子,我们平时网购买东西,下单后会生成一个订单号,然后商家会根据这个订单号发货,发货后又有一个快递单号,然后快递公司就会根据这个快递单号将网购东西快递给我们.在这一过程 ...

  4. 彻底理解Java的Future模式

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34173549/article/details/81074477 先上一个场景:假如你突然想做 ...

  5. Java程序性能优化 读书笔记(十)并行设计模式:Future模式

    转载:Java多线程编程中Future模式的详解<转> 参考:葛一鸣,Java程序性能优化.清华大学出版社. 随着多核时代的到来,CPU的并行能力有了很大的提升.在这种背景下,传统的串行程 ...

  6. 【小家java】一个例子让就能你彻底理解Java的Future模式,Future类的设计思想

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  7. java线程future_Java中多线程对运行结果怎么利用future获取

    Java中多线程对运行结果怎么利用future获取 发布时间:2020-12-07 17:11:08 来源:亿速云 阅读:124 作者:Leah Java中多线程对运行结果怎么利用future获取?针 ...

  8. java多线程系列13 设计模式 Future 模式

    Future 模式 类似于ajax请求  页面异步的进行后台请求 用户无需等待请求的结果 就可以继续浏览或者操作 核心就是:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑 ...

  9. 多线程Future模式使用

    序 上次分享了多线程与自动任务的风花雪月悲惨结局,今天借此继续分享下多线程带返回结果的基本讨论与实现. 一.使用场景 一个业务方法可能执行时间很长,而我们也不急着摇返回结果,那么就可以用多线程去开启一 ...

最新文章

  1. C# Timer使用方法示例
  2. Java基础 - 面向对象 - 构造方法
  3. 海外博士一般朝九晚五,国内博士动辄十几个小时科研时间。为什么普遍认为海外博士水平比较高?...
  4. JBoss Forge NetBeans集成–入门
  5. PCH文件的创建和配置
  6. vc++出现warningC4819的处理方法
  7. FTD概要图之MVC架构
  8. Centos6.5优化Tomcat7
  9. 联想 m73 黑苹果 软路由 esxi AIO
  10. Mac投屏软件推荐duet
  11. 《Netty实战》总结
  12. 打印机驱动无法安装到计算机是,解决方法:Win7无法安装打印机,也找不到核心驱动程序包。...
  13. log4cxx的使用
  14. 华哥倒酒(二分答案)
  15. mgo.v2无法连接MongoDB 5.0.x
  16. java从邮箱获取邮件_javaMail正确读取邮箱内容的方式
  17. 关于系统时钟的配置问题,如是stm32f1的系统时钟为72Mhz
  18. 正则表达式学习的一天
  19. 全手动搭建Kubernetes集群——Master管理节点和Node工作节点部署
  20. 1、C++一些小的知识点之怎么表示e的x次方

热门文章

  1. 腾讯视频怎么删除收藏的内容
  2. 在jsp中对mysql数据库分页的方法
  3. redisTemplate.opsForValue()中方法讲解
  4. Postman用法简介-Http请求模拟工具
  5. java wait 释放锁_JAVA锁之wait,notify(wait会释放锁,notify仅仅只是通知,不释放锁)...
  6. ES6 里面的 class
  7. bcc挖矿用什么_BCC对BTC挖矿有何影响?
  8. java高级教程_Java高级教程02
  9. Java8————Lambda表达式(二)
  10. html加动画不改变高度,怎么为不定高度(height:auto)的元素添加CSS3 transition-property:height 动画...