Java Thread.sleep 入门教程

简介

在 Java 编程中,线程控制是必不可少的部分。Thread.sleep 是一个简单但十分重要的方法,它可以使当前正在执行的线程休眠指定的毫秒时间。这篇文章将带你全面了解 Java 中 Thread.sleep 的基础概念、使用方法、常见实践以及最佳实践,帮助你更高效地利用这一功能。

目录

  1. 基础概念
  2. 使用方法
  3. 常见实践
  4. 最佳实践
  5. 小结
  6. 参考资料

基础概念

Thread.sleep 是一个静态方法,属于 Thread 类。其作用是阻塞当前正在执行的线程,使其进入睡眠状态,并使其他线程有机会执行。关键点包括:

  • Thread.sleep 接受一个参数,指定线程休眠的时间,单位为毫秒。
  • 该方法会抛出 InterruptedException,因此需要在代码中进行异常处理。
  • 睡眠的线程不释放同步锁,也就是说,如果线程在睡眠前持有某个被 synchronized 块保护的锁,则在它醒来之前,其他线程无法访问这段代码。

使用方法

基本用法

以下是使用 Thread.sleep 的基本示例:

public class SleepExample {public static void main(String[] args) {System.out.println("Thread will sleep for 3 seconds.");try {Thread.sleep(3000); // 当前线程休眠3秒} catch (InterruptedException e) {// 捕获异常是必要的,因为 sleep 方法可能会抛出 InterruptedExceptionSystem.err.println("Thread interrupted: " + e.getMessage());}System.out.println("Thread is awake!");}
}

捕获异常

正确捕获 InterruptedException 是使用 Thread.sleep 时不能忽略的重要部分。因为在调用睡眠期间,线程可能会被中断。

常见实践

线程轮询

线程轮询需要定期检查某个条件,此时可以将 Thread.sleep 用于控制轮询频率。

public class PollingExample {public void poll() {while (!Thread.currentThread().isInterrupted()) {// 执行某个周期任务doPollingTask();try {Thread.sleep(1000); // 每秒轮询一次} catch (InterruptedException e) {Thread.currentThread().interrupt(); // 恢复中断状态以便外界检测}}}private void doPollingTask() {System.out.println("Polling...");}
}

延迟操作

Thread.sleep 可以用于实现操作之间的延时,比如在一些游戏或者动画中。

public class AnimationExample {public void animate() {for (int i = 0; i < 10; i++) {System.out.println("Displaying frame " + i);try {Thread.sleep(500); // 每个帧之间间隔500毫秒} catch (InterruptedException e) {System.err.println("Animation interrupted: " + e.getMessage());return;}}}
}

最佳实践

  1. 适当捕获异常:总是确保在 try-catch 块中调用 Thread.sleep,并妥善处理中断请求。
  2. 使用 TimeUnit:可以使用 TimeUnit 类来增加代码可读性:
    try {TimeUnit.SECONDS.sleep(1);
    } catch (InterruptedException e) {Thread.currentThread().interrupt();
    }
    
  3. 恢复中断状态:在捕获 InterruptedException 时,除非有特定需求,否则应恢复线程的中断状态。
  4. 延迟替代:在某些情况下(如生产环境中长时间等待),考虑更高级的并发工具或框架以代替 Thread.sleep

小结

Thread.sleep 是一种简单但有效的线程控制方法。了解它的用法以及潜在的坑点是开发健壮 Java 多线程程序的重要技能。在实际开发中,需要根据具体情境,选择合适的实现方式以平衡性能与简洁性。

参考资料

  • Java 官方文档 - Class Thread

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/878167.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Easysearch 集群重置 admin 用户密码

admin 用户是 Easysearch 通过配置文件 user.yml 默认添加的,配置如下: ## Demo users admin:hash: "$2y$12$mA9DDk7iOBQA3u.Ebc0QSOVKsgwlkm6OJcrEcpyrTrT5M5It86usq" # 465f7466f79a67b9039dreserved: trueexternal_roles:- "admin"description: "…

Linux 中awk命令自定义函数

001、[root@PC1 test]# echo a | awk function my_length(str) {return length(str)}; {text = "Hello"; print "Length of text:", my_length(text)} Length of text: 5 。

【CodeForces训练记录】Codeforces Round 1002 (Div. 2)

训练情况赛后反思 这个B题感觉太猜猜乐了,个人感觉B难度远大于C A题 想要数组 \(c\) 至少有三个不同的元素,数组 \(a,b\) 的元素数的和必须 \(\ge 4\),如果种类和为 \(3\) 种,最多能凑出两种不同的数字点击查看代码 #include <bits/stdc++.h> // #define int long lo…

进程的基本概念

写在前面 这是一篇十分简短的文章,主要讲述了进程的基本概念,如何创建进程以及一些细节问题,为接下来学习进程调度打好基础。 什么是进程 简单来说,进程就是运行中的程序。比如,我们双击了存放在硬盘中的某个exe程序,程序被加载到内存中运行起来后,就是所谓的进程。所以…

python 中实现gz文件的解压

python 中实现gz文件的解压。001、(base) [root@PC1 test]# ls a.txt.gz test.py (base) [root@PC1 test]# zcat a.txt.gz ## 测试的压缩文件 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 (base) [root@PC1 test]# cat test.py ## 测试的py…

【模拟电子技术】19-差分放大电路的构成

【模拟电子技术】19-差分放大电路的构成 我们知道在直接耦合放大电路中零点漂移是一个很困扰的问题(可以理解为静态工作点稳定问题),我们通过增加电阻Re来抑制温漂,前面我们也提到过有一种电路可以在直流的时候doubleRe,而交流的时候使得Re消失我们想要抑制这种现象,想到…

球钟问题

球钟问题,对栈和队列的实际应用球钟问题 1. 问题背景 ​ 球钟是一个利用球的移动来记录时间的简单装置。它有三个可以容纳若干个球的指示器:分钟指示器,五分钟指示器和小时指示器。 举例:若分钟指示器中有2个球,五分钟指示器中有6个球,小时指示器中有5个球,则时间为5:32…

本地部署deepseek

前言 如果你电脑配置不错,且期望不受网络限制也可以流畅使用deepseek,那就本地部署deepseek试试吧。下载并安装Ollama Ollama是一个开源的 LLM(大型语言模型)服务工具(就是大模型运行工具),用于简化在本地运行大语言模型,降低使用大语言模型的门槛,使得大模型的开发者…

【邮件安全】近期常见的钓鱼邮件(202411期)

本期主要分享自2024年11月至今几种典型的钓鱼邮件样本。希望通过这种分享,可以帮助广大用户提高警惕性,增强识别与防范钓鱼邮件的能力。 邮箱账户异常类 以下图为例,该钓鱼邮件伪造用户账户出现异常登录情况,引导用户点击“认证账户”按钮进入钓鱼页面。 下图是一封伪造用户…

AI医院:大语言模型在多智能体医疗交互模拟器中的表现如何?

近年来,人工智能(AI)技术,尤其是大语言模型(LLMs),在医学领域取得了显著进展。这些模型在静态医疗问答任务中表现优异,甚至在某些情况下能够媲美人类专家。然而,医学诊断并非单一静态的任务,而是一个动态、复杂的过程,涉及多轮互动和信息收集。 为了更全面地评估LLM…

万字综述|一文掌握大语言模型在生物信息学中的应用

随着大语言模型(LLMs)技术的飞速发展,其在自然语言处理(NLP)领域的成功应用逐渐扩展到了生物信息学领域。生物信息学作为一个跨学科的领域,涉及基因组学、蛋白质组学、药物发现等多个方向,LLMs的引入为这些领域带来了新的研究工具和方法。 2025年1月,佐治亚大学Tianmin…

自主做前端页面小工程07

通过使用elementui和js部分代码实现 其重点在于导航栏与弹窗和数据的回显与数据只可预览,基本完成 这是补发昨天学习记录