Java延時

在 Java 中實現延時操作主要有以下幾種方式,根據使用場景選擇合適的方法:

1.?Thread.sleep()(最常用)

java

復制

下載

try {// 延時 1000 毫秒(1秒)Thread.sleep(1000); 
} catch (InterruptedException e) {// 處理中斷異常(通常恢復中斷狀態)Thread.currentThread().interrupt(); 
}

特點

  • 簡單易用,阻塞當前線程

  • 需處理?InterruptedException


2.?TimeUnit(推薦,更語義化)

java

復制

下載

import java.util.concurrent.TimeUnit;try {TimeUnit.SECONDS.sleep(1);  // 延時 1 秒// 等價于 TimeUnit.MILLISECONDS.sleep(1000);
} catch (InterruptedException e) {Thread.currentThread().interrupt();
}

優點:時間單位更清晰(支持?NANOSECONDS/MICROSECONDS/MILLISECONDS/SECONDS?等)


3.?ScheduledExecutorService(異步延時任務)

java

復制

下載

import java.util.concurrent.*;ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);// 延時 1 秒后執行任務(異步不阻塞主線程)
scheduler.schedule(() -> {System.out.println("任務執行");
}, 1, TimeUnit.SECONDS);// 關閉線程池(實際開發中根據業務決定關閉時機)
scheduler.shutdown(); 

適用場景

  • 需要異步執行延時任務

  • 避免阻塞主線程

  • 支持定時周期性任務


4.?Timer?類(舊版方案,不推薦新項目使用)

java

復制

下載

Timer timer = new Timer();
timer.schedule(new TimerTask() {@Overridepublic void run() {System.out.println("延時任務");}
}, 1000); // 延時 1 秒

缺點

  • 單線程執行,任務相互影響

  • 拋出異常會導致整個 Timer 終止

  • 推薦用?ScheduledExecutorService?替代


5.?Object.wait(timeout)(線程同步場景)

java

復制

下載

synchronized (lock) {try {lock.wait(1000); // 釋放鎖并等待 1 秒} catch (InterruptedException e) {Thread.currentThread().interrupt();}
}

注意:需在同步塊中使用,會釋放對象鎖。


選擇建議:

  1. 簡單阻塞當前線程?→ 用?Thread.sleep()?或?TimeUnit.sleep()

  2. 后臺異步延時任務?→ 用?ScheduledExecutorService

  3. 線程間協調等待?→ 用?Object.wait(timeout)

  4. 避免在新項目中使用?Timer

?? 注意:所有延時方法的時間精度受操作系統調度影響,不保證完全精確。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/85000.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/85000.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/85000.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電阻篇---下拉電阻的取值

下拉電阻的取值需要綜合考慮電路驅動能力、功耗、信號完整性、噪聲容限等多方面因素。以下是詳細的取值分析及方法: 一、下拉電阻的核心影響因素 1. 驅動能力與電流限制 單片機 IO 口驅動能力:如 STM32 的 IO 口在輸入模式下的漏電流通常很小&#xf…

NY271NY274美光科技固態NY278NY284

美光科技NY系列固態硬盤深度剖析:技術、市場與未來 技術前沿:232層NAND架構與性能突破 在存儲技術的賽道上,美光科技(Micron)始終是行業領跑者。其NY系列固態硬盤(SSD)憑借232層NAND閃存架構的…

微信開發者工具 插件未授權使用,user uni can not visit app

參考:https://www.jingpinma.cn/archives/159.html 問題描述 我下載了一個別人的小程序,想運行看看效果,結果報錯信息如下 原因 其實就是插件沒有安裝,需要到小程序平臺安裝插件。處理辦法如下 在 app.json 里,聲…

UE5 讀取配置文件

使用免費的Varest插件,可以讀取本地的json數據 獲取配置文件路徑:當前配置文件在工程根目錄,打包后在 Windows/項目名稱 下 讀取json 打包后需要手動復制配置文件到Windows/項目名稱 下

【kdump專欄】KEXEC機制中SME(安全內存加密)

【kdump專欄】KEXEC機制中SME&#xff08;安全內存加密&#xff09; 原始代碼&#xff1a; /* Ensure that these pages are decrypted if SME is enabled. */ 533 if (pages) 534 arch_kexec_post_alloc_pages(page_address(pages), 1 << order, 0);&#x1f4cc…

C# vs2022 找不到指定的 SDK“Microsof.NET.Sdk

找不到指定的 SDK"Microsof.NET.Sdk 第一查 看 系統盤目錄 C:\Program Files\dotnet第二 命令行輸入 dotnet --version第三 檢查環境變量總結 只要執行dotnet --version 正常返回版本號此問題即解決 第一查 看 系統盤目錄 C:\Program Files\dotnet 有2種方式 去檢查 是否…

Pytest斷言全解析:掌握測試驗證的核心藝術

Pytest斷言全解析&#xff1a;掌握測試驗證的核心藝術 一、斷言的本質與重要性 什么是斷言&#xff1f; 斷言是自動化測試中的驗證檢查點&#xff0c;用于確認代碼行為是否符合預期。在Pytest中&#xff0c;斷言直接使用Python原生assert語句&#xff0c;當條件不滿足時拋出…

【編譯原理】題目合集(一)

未經許可,禁止轉載。 文章目錄 選擇填空綜合選擇 將編譯程序分成若干個“遍”是為了 (D.利用有限的機器內存,但降低了執行效率) A.提高程序的執行效率 B.使程序的結構更加清晰 C.利用有限的機器內存并提高執行效率 D.利用有限的機器內存,但降低了執行效率 詞法分析…

uni-app項目實戰筆記13--全屏頁面的absolute定位布局和fit-content自適應內容寬度

本篇主要實現全屏頁面的布局&#xff0c;其中還涉及內容自適應寬度。 創建一個preview.vue頁面用于圖片預覽&#xff0c;寫入以下代碼&#xff1a; <template><view class"preview"><swiper circular><swiper-item v-for"item in 5&quo…

OVS Faucet Tutorial筆記(下)

官方文檔&#xff1a; OVS Faucet Tutorial 5、Routing Faucet Router 通過控制器模擬三層網關&#xff0c;提供 ARP 應答、路由轉發功能。 5.1 控制器配置 5.1.1 編輯控制器yaml文件&#xff0c;增加router配置 rootserver1:~/faucet/inst# vi faucet.yaml dps:switch-1:d…

PCB設計教程【大師篇】stm32開發板PCB布線(信號部分)

前言 本教程基于B站Expert電子實驗室的PCB設計教學的整理&#xff0c;為個人學習記錄&#xff0c;旨在幫助PCB設計新手入門。所有內容僅作學習交流使用&#xff0c;無任何商業目的。若涉及侵權&#xff0c;請隨時聯系&#xff0c;將會立即處理 1. 布線優先級與原則 - 遵循“重…

Phthon3 學習記錄-0613

List&#xff08;列表&#xff09;、Tuple&#xff08;元組&#xff09;、Set&#xff08;集合&#xff09;和 Dictionary&#xff08;字典&#xff09; 在接口自動化測試中&#xff0c;List&#xff08;列表&#xff09;、Tuple&#xff08;元組&#xff09;、Set&#xff08…

UVa12298 3KP-BASH Project

UVa12298 3KP-BASH Project 題目鏈接題意輸入格式輸出格式 分析AC 代碼 題目鏈接 UVa12298 3KP-BASH Project 題意 摘自 《算法競賽入門經典&#xff1a;訓練指南》劉汝佳&#xff0c;陳鋒著。有刪改。 你的任務是為一個假想的 3KP 操作系統編寫一個簡單的 Bash 模擬器。由于操…

云打包生成的ipa上傳構建版本經驗分享

在上架ios應用&#xff0c;在蘋果開發者中心操作的時候&#xff0c;需要提供一個構建版本&#xff0c;如下圖所示&#xff1a; 點擊藍色加號&#xff0c;添加構建版本&#xff0c;但是點擊藍色加號后&#xff0c;并沒有構建版本可以選。 原因是需要下載下面它推薦的工具來上傳…

ESP32的spi通訊(Arduino)

目錄 一.基本配置 1.esp32-wroom-32引腳圖 2.接線方式 3.Arduino芯片選擇和庫文件 3.1Arduino配置&#xff08;2.0.11&#xff09; 3.2 下載ESP32SPISlave庫&#xff08;0.6.8&#xff09;文件 二、代碼編寫 1.主機代碼 2.從機代碼 3.注意事項 三、運行效果 一.基本…

Spring-rabbit重試消費源碼分析

在集成RabbitMQ與Spring Boot 3.1.x時&#xff0c;RetryOperationsInterceptor 是實現消息重試機制的關鍵組件。這里將深入分析 RetryOperationsInterceptor 的工作原理&#xff0c;尤其是在消費者消費失敗時的行為&#xff0c;并結合底層源碼進行詳解。 一、配置解析 首先&a…

如何使用JacksonTypeHandler處理mysql json字符串轉List對象的問題

在使用mysql5.7或更高版本時&#xff0c;json類型字段應用場景越來越多&#xff0c;對于普通的對象或者List<Integer>、List<String>這些基礎類型&#xff0c;jacksonTypeHandler都能很好的處理&#xff0c;如下&#xff1a; 1、定義一個person對象 import com.f…

華為云Flexus+DeepSeek征文 | 基于Dify構建股票分析助手

華為云FlexusDeepSeek征文 | 基于Dify構建AI 圖片生成應用 一、構建股票分析助手前言二、構建股票分析助手環境2.1 基于FlexusX實例的Dify平臺2.2 基于MaaS的模型API商用服務 三、構建股票分析助手實戰3.1 配置Dify環境3.2 配置Dify工具3.3 創建股票分析助手3.4 使用股票分析助…

【0.1 漫畫計算機組成原理】

??? 漫畫計算機組成原理 ?? 學習目標:深入理解計算機硬件基礎,為后續Java編程和性能優化打下堅實基礎 ?? 目錄 CPU架構與指令集內存層次結構馮諾依曼架構與哈佛架構總線系統與IO設備計算機性能分析實際應用場景?? 漫畫引言 小明: “為什么我的Java程序有時候跑得飛…

pytorch 實戰二 CNN手寫數字識別

系列文章目錄 文章目錄 系列文章目錄前言一、torchvision.datasets1. 數據下載2. 數據分批次傳入 二、網絡1. 網絡搭建2. 訓練3.測試 完整代碼三、保存模型與推理&#xff08;inference&#xff09;模型保存推理鳴謝 前言 手寫數字識別&#xff0c;就是要根據手寫的數字0~9&…