sleep()方法平替写法

本文介绍了如何使用Java的TimeUnit类替换原始的sleep()方法,以简化长时间休眠时间的转换和处理负数休眠时间,同时避免InterruptedException异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

        在使用sleep()方法休眠时,一般需要传入休眠时间的毫秒值;如果休眠时间为(2小时53分10秒)这样需要对这个时间转换为毫秒值,对于这些时间的转换是很琐碎的,且sleep()方法如果休眠时间为“负数”时还会抛出异常;下面有一个平替sleep()方法解决了这些问题;

  // 休眠 2小时53分10秒
  public static void main(String[] args) {

       // 时间单位
       long second = 1000L;
       long minute = second * 60;
       long hour = minute * 60;

       /*
            弊端
                1.计算麻烦
                2.如果休眠时间为“负数”会抛出异常
        */
        try {
            // 计算出2小时53分10秒转为毫秒数
            long time = (hour * 2) + (minute * 56) + (second * 10);
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


         /*
           好处:
                1.更灵活不用再去进行计算
                2.如果休眠时间为“负数”则不会执行休眠,不会像sleep()方法那样抛出异常
          */
        try {
            TimeUnit.HOURS.sleep(2);
            TimeUnit.MINUTES.sleep(53);
            TimeUnit.SECONDS.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

TimeUnit下sleep()方法源码

    public void sleep(long timeout) throws InterruptedException {
        if (timeout > 0) { // 若为负数则不执行休眠
            long ms = toMillis(timeout); 
            int ns = excessNanos(timeout, ms); 
            Thread.sleep(ms, ns); // 本质还是调用了Thread.sleep()方法
        }
    }

#!/bin/bash HEX_DIGITS=(0 1 2 3 4 5 6 7 8 9 a b c d e f) generateSignature() { local secret=$1 local timestamp= 2 l o c a l v a l u e = " 2localvalue="{secret} t i m e s t a m p " l o c a l m d 5 h a s h = timestamp"localmd5 h ​ ash=(echo -n “${value}” | md5sum | awk ‘{print $1}’) local formatted_text="" for ((i = 0; i < ${#md5_hash}; i += 2)); do hex_pair=${md5_hash:i:2} dec_value=$((16#$hex_pair)) first_char_index=$((dec_value / 16)) second_char_index=$((dec_value % 16)) formatted_text+="${HEX_DIGITS[first_char_index]}${HEX_DIGITS[second_char_index]}" done echo "$formatted_text" } 配置参数 SECRET=“31cfa56c-02ba-45cc-8502-3f64a7aebb8c” API_URL=“http://api-in.stone.netease.com/kuafu/api/v3/form/submit” headers=“Content-Type: application/json” 目标主机列表 HOSTS=( “public-azkaban-6.gy.ntes” “public-azkaban-7.gy.ntes” “public-azkaban-8.gy.ntes” “public-hive-5.gy.ntes” “public-hive-6.gy.ntes” ) for HOST in " H O S T S [ @ ] " ; d o T I M E S T A M P = HOSTS[@]";doTIMESTAMP=(date +%s) SIGNATURE=$(generateSignature “$SECRET” “ T I M E S T A M P " ) R E Q U E S T U R L = " TIMESTAMP")REQUEST U ​ RL="{API_URL}?gwClientId=724&gwClientUser=wb.zhangjian17&gwTimestamp=ParseError: KaTeX parse error: Expected 'EOF', got '&' at position 12: {TIMESTAMP}&̲gwSignature={SIGNATURE}” payload=$(cat <<EOF { “processDefId”: “服务器维修:40:229789844”, “variables”: { “是否需要业务处理恢复”: “是”, “是否需要发送通知”: “是”, “priority”: “普通”, “故障描述”: “$HOST”, “产品名称”: { “value”: “猛犸大数据台”, “label”: “猛犸大数据台”, “key”: “猛犸大数据台” }, “故障部件”: [“硬盘”, “其他”], “影响”: “理论无影响”, “主题”: “服务器维修-猛犸大数据台-$HOST-硬盘-其他”, “预维修时间”: “2025-04-02 11:26:02”, “自动化处理附件”: “”, “主机名”: “$HOST”, “跟踪者”: “ZQ05523” }, “user”: { “account”: “wb.zhangjian17”, “jobNumber”: “ZQ05523”, “mail”: “wb.zhangjian17@corp.netease.com”, “name”: “张建” } } EOF ) # 发送请求 response=$(curl -s -X POST -H "$headers" --data "$payload" "$REQUEST_URL") if [ $? -eq 0 ]; then echo "[$HOST] 创建成功: $response" else echo "[$HOST] 创建失败: $response" fi sleep 1 # 避免请求频率过高 done “预维修时间”: “2025-04-02 11:26:02”,改为创建工单的时间 完整代码
最新发布
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值