java多线程 future_Java多线程Future模式
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模式相关推荐
- Java多线程编程中Future模式的详解
转载自 https://www.cnblogs.com/winkey4986/p/6203225.html Java多线程编程中,常用的多线程设计模式包括:Future模式.Master-Worker ...
- 学习多线程中的 Future 模式一篇文章就够了 !!!
文章目录 一.Future 模式 二.Future模式的主要角色 三.Future模式的简单实现 四.JDK中的Future模式 五.Guava对Future模式的支持 一.Future 模式 Fut ...
- Java是如何实现Future模式的?万字详解!
1 Future是什么? 先举个例子,我们平时网购买东西,下单后会生成一个订单号,然后商家会根据这个订单号发货,发货后又有一个快递单号,然后快递公司就会根据这个快递单号将网购东西快递给我们.在这一过程 ...
- 彻底理解Java的Future模式
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_34173549/article/details/81074477 先上一个场景:假如你突然想做 ...
- Java程序性能优化 读书笔记(十)并行设计模式:Future模式
转载:Java多线程编程中Future模式的详解<转> 参考:葛一鸣,Java程序性能优化.清华大学出版社. 随着多核时代的到来,CPU的并行能力有了很大的提升.在这种背景下,传统的串行程 ...
- 【小家java】一个例子让就能你彻底理解Java的Future模式,Future类的设计思想
相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...
- java线程future_Java中多线程对运行结果怎么利用future获取
Java中多线程对运行结果怎么利用future获取 发布时间:2020-12-07 17:11:08 来源:亿速云 阅读:124 作者:Leah Java中多线程对运行结果怎么利用future获取?针 ...
- java多线程系列13 设计模式 Future 模式
Future 模式 类似于ajax请求 页面异步的进行后台请求 用户无需等待请求的结果 就可以继续浏览或者操作 核心就是:去除了主函数的等待时间,并使得原本需要等待的时间段可以用于处理其他业务逻辑 ...
- 多线程Future模式使用
序 上次分享了多线程与自动任务的风花雪月悲惨结局,今天借此继续分享下多线程带返回结果的基本讨论与实现. 一.使用场景 一个业务方法可能执行时间很长,而我们也不急着摇返回结果,那么就可以用多线程去开启一 ...
最新文章
- C# Timer使用方法示例
- Java基础 - 面向对象 - 构造方法
- 海外博士一般朝九晚五,国内博士动辄十几个小时科研时间。为什么普遍认为海外博士水平比较高?...
- JBoss Forge NetBeans集成–入门
- PCH文件的创建和配置
- vc++出现warningC4819的处理方法
- FTD概要图之MVC架构
- Centos6.5优化Tomcat7
- 联想 m73 黑苹果 软路由 esxi AIO
- Mac投屏软件推荐duet
- 《Netty实战》总结
- 打印机驱动无法安装到计算机是,解决方法:Win7无法安装打印机,也找不到核心驱动程序包。...
- log4cxx的使用
- 华哥倒酒(二分答案)
- mgo.v2无法连接MongoDB 5.0.x
- java从邮箱获取邮件_javaMail正确读取邮箱内容的方式
- 关于系统时钟的配置问题,如是stm32f1的系统时钟为72Mhz
- 正则表达式学习的一天
- 全手动搭建Kubernetes集群——Master管理节点和Node工作节点部署
- 1、C++一些小的知识点之怎么表示e的x次方
热门文章
- 腾讯视频怎么删除收藏的内容
- 在jsp中对mysql数据库分页的方法
- redisTemplate.opsForValue()中方法讲解
- Postman用法简介-Http请求模拟工具
- java wait 释放锁_JAVA锁之wait,notify(wait会释放锁,notify仅仅只是通知,不释放锁)...
- ES6 里面的 class
- bcc挖矿用什么_BCC对BTC挖矿有何影响?
- java高级教程_Java高级教程02
- Java8————Lambda表达式(二)
- html加动画不改变高度,怎么为不定高度(height:auto)的元素添加CSS3 transition-property:height 动画...