当前位置: 首页 > wzjs >正文

语文答题模板高中qq排名优化网站

语文答题模板高中,qq排名优化网站,wordpress 编辑图片无法显示,做外贸哪个网站好问题: 有三个流程,流程1.2.3,流程2.3是流程1的子流程,若在流程1的过程中发起流程2.3,计算流程1的时长要排除流程2.3的时间,流程2.3之间可能是包含、交集、无交集三种。 实现 代码: import jav…

问题:
有三个流程,流程1.2.3,流程2.3是流程1的子流程,若在流程1的过程中发起流程2.3,计算流程1的时长要排除流程2.3的时间,流程2.3之间可能是包含、交集、无交集三种。

实现

代码:

import java.util.Date;class Process {private String name;private Date startTime;private Date endTime;public Process(String name) {this.name = name;}// 开始流程public void start() {this.startTime = new Date();System.out.println(name + " started at: " + startTime);}// 结束流程public void end() {this.endTime = new Date();System.out.println(name + " ended at: " + endTime);}// 获取流程开始时间public Date getStartTime() {return startTime;}// 获取流程结束时间public Date getEndTime() {return endTime;}// 计算流程时长(毫秒)public long getDuration() {if (startTime == null || endTime == null) {throw new IllegalStateException("Process " + name + " has not started or ended.");}return endTime.getTime() - startTime.getTime();}
}class MainProcess extends Process {private Process subProcess2;private Process subProcess3;public MainProcess(String name) {super(name);this.subProcess2 = new Process("Sub-Process 2");this.subProcess3 = new Process("Sub-Process 3");}// 启动子流程2public void startSubProcess2() {subProcess2.start();}// 结束子流程2public void endSubProcess2() {subProcess2.end();}// 启动子流程3public void startSubProcess3() {subProcess3.start();}// 结束子流程3public void endSubProcess3() {subProcess3.end();}// 计算主流程1的时长(排除子流程2和3的时间)@Overridepublic long getDuration() {long mainDuration = super.getDuration(); // 主流程总时长// 计算子流程2和3的总时间(考虑包含、交集或无交集的情况)long subProcessDuration = calculateSubProcessDuration();return mainDuration - subProcessDuration; // 排除子流程时间}// 计算子流程2和3的总时间private long calculateSubProcessDuration() {Date sub2Start = subProcess2.getStartTime();Date sub2End = subProcess2.getEndTime();Date sub3Start = subProcess3.getStartTime();Date sub3End = subProcess3.getEndTime();// 如果子流程2或3未启动或未结束,返回0if (sub2Start == null || sub2End == null || sub3Start == null || sub3End == null) {return 0;}// 计算子流程2和3的时间交集long overlapStart = Math.max(sub2Start.getTime(), sub3Start.getTime());long overlapEnd = Math.min(sub2End.getTime(), sub3End.getTime());long overlapDuration = Math.max(0, overlapEnd - overlapStart); // 交集时长// 计算子流程2和3的总时长(去重交集部分)long sub2Duration = subProcess2.getDuration();long sub3Duration = subProcess3.getDuration();return sub2Duration + sub3Duration - overlapDuration;}
}public class ProcessManagement {public static void main(String[] args) throws InterruptedException {MainProcess process1 = new MainProcess("Process 1");// 启动主流程1process1.start();Thread.sleep(1000); // 模拟主流程1的运行时间// 启动子流程2process1.startSubProcess2();Thread.sleep(2000); // 模拟子流程2的运行时间// 启动子流程3(与子流程2有交集)process1.startSubProcess3();Thread.sleep(1500); // 模拟子流程3的运行时间process1.endSubProcess3();// 结束子流程2process1.endSubProcess2();Thread.sleep(1000); // 模拟主流程1的剩余运行时间// 结束主流程1process1.end();// 计算并输出主流程1的时长(排除子流程2和3的时间)System.out.println("Process 1 duration (excluding sub-processes): " + process1.getDuration() + " ms");}
}

代码说明

  1. Process 类:
  • 表示一个流程,包含流程名称、开始时间和结束时间。

  • 提供 start()、end() 和 getDuration() 方法,分别用于启动流程、结束流程和计算流程时长。

  1. MainProcess 类:
  • 继承 Process 类,表示主流程1。

  • 包含子流程2和子流程3的实例。

  • 重写 getDuration() 方法,计算主流程1的时长时排除子流程2和3的时间。

  • 新增 calculateSubProcessDuration() 方法,动态计算子流程2和3的总时间(考虑包含、交集或无交集的情况)。

  1. ProcessManagement 类:
  • 模拟流程的执行过程,包括主流程1和子流程2、3的启动与结束。

  • 输出主流程1的时长(排除子流程2和3的时间)。

关键点

  • 时间交集计算:通过比较子流程2和3的开始和结束时间,计算它们的交集时长。

  • 去重逻辑:在计算子流程总时间时,减去交集部分,避免重复计算。

  • 动态适应:无论子流程2和3是包含、交集还是无交集,都能正确计算主流程1的时长。

关键代码解析

long overlapStart = Math.max(sub2Start.getTime(), sub3Start.getTime());
long overlapEnd = Math.min(sub2End.getTime(), sub3End.getTime());
long overlapDuration = Math.max(0, overlapEnd - overlapStart); // 交集时长
  1. sub2Start.getTime() 和 sub3Start.getTime()
  • 作用:获取子流程2和子流程3的开始时间(以毫秒为单位)。

  • 说明:

    • sub2Start 是子流程2的开始时间(Date 类型)。

    • getTime() 方法将 Date 对象转换为从1970年1月1日00:00:00 GMT开始的毫秒数(long 类型)。

  1. Math.max(sub2Start.getTime(), sub3Start.getTime())
  • 作用:计算两个开始时间中的较晚时间。

  • 说明:

    • 如果子流程2的开始时间晚于子流程3的开始时间,则返回子流程2的开始时间。

    • 如果子流程3的开始时间晚于子流程2的开始时间,则返回子流程3的开始时间。

    • 这个值表示两个流程的交集时间段的开始时间。

  1. sub2End.getTime() 和 sub3End.getTime()
  • 作用:获取子流程2和子流程3的结束时间(以毫秒为单位)。

  • 说明:

    • sub2End 是子流程2的结束时间(Date 类型)。

    • getTime() 方法将 Date 对象转换为从1970年1月1日00:00:00 GMT开始的毫秒数(long 类型)。

  1. Math.min(sub2End.getTime(), sub3End.getTime())
  • 作用:计算两个结束时间中的较早时间。

  • 说明:

    • 如果子流程2的结束时间早于子流程3的结束时间,则返回子流程2的结束时间。

    • 如果子流程3的结束时间早于子流程2的结束时间,则返回子流程3的结束时间。

    • 这个值表示两个流程的交集时间段的结束时间。

  1. overlapEnd - overlapStart
  • 作用:计算交集时间段的时长(以毫秒为单位)。

  • 说明:

    • 如果 overlapEnd 大于 overlapStart,则结果为正值,表示两个流程有交集。

    • 如果 overlapEnd 小于或等于 overlapStart,则结果为负值或零,表示两个流程无交集。

  1. Math.max(0, overlapEnd - overlapStart)
  • 作用:确保交集时长为非负数。

  • 说明:

    • 如果 overlapEnd - overlapStart 为负值(即两个流程无交集),则返回 0。

    • 如果 overlapEnd - overlapStart 为正值(即两个流程有交集),则返回实际交集时长。

http://www.dtcms.com/wzjs/291949.html

相关文章:

  • 房地产新闻建发360优化大师官方下载
  • 网站交给别人做安全吗北京建公司网站价格
  • 怎么把园林设计网站做的酷炫seo整合营销
  • 建设网站如何挣钱百度网址安全检测中心
  • 企业做网站公司怎么做google网站推广
  • 网站建设取得了优化营商环境心得体会
  • 网站制作合作协议平台交易网
  • 定位网站关键词在线crm软件
  • 广州做啊里巴巴网站多少钱网店运营工作内容
  • 电子商务网站的设计工具沧州网站建设公司
  • 网站如何做百度权重官方百度平台
  • 自建商城网站营销的手段和方法
  • 做网站媒体b2b免费推广平台
  • 怎么做一网站首页seo基础教程使用
  • 帝国手机网站模板seo推广怎么样
  • 广州平台网站建设长春网站建设方案推广
  • 有没有专门做家纺的网站新手怎么入行sem
  • 珠海商城网站制作深圳seo
  • 典型b2c模式的网站保定网站建设公司哪家好
  • 网站顶部展出的大幅广告百度指数功能模块有哪些
  • 政府投资类网站建设单位今日最新新闻摘抄
  • 建设网站业务不好做seo优化搜索推广
  • 蚌埠做网站多少钱公司推广咨询
  • 高职图书馆网站建设大赛广州百度竞价托管
  • 网站建设yuanmus外贸seo
  • 产品视频宣传片长春百度关键词优化
  • wordpress上传网站独立源码seo公司 彼亿营销
  • 水利部网站建设管理司优化推广排名网站教程
  • 开企网站建设公司网站建设公司
  • 超炫网站做网站用哪个软件