在Java中使用`Thread.sleep()`(注意:没有SystemClock.sleep方法,可能是提问中的笔误)时,线程会被阻塞吗?答案是肯定的,调用`Thread.sleep(long millis)`会使当前线程进入阻塞状态,暂停执行指定的毫秒数。在此期间,线程不会消耗CPU资源,但可能因线程调度或系统时钟分辨率导致实际睡眠时间略长。
如何精确控制睡眠时间?可以结合`System.nanoTime()`测量时间差来调整睡眠时长。例如,在每次循环中计算已睡眠时间,并动态修正剩余睡眠时间。此外,使用`ScheduledExecutorService`替代`Thread.sleep()`,通过任务调度实现更精确的时间控制。需要注意的是,操作系统和JVM的限制可能导致微秒级精度难以达成,通常建议以毫秒为单位进行设计。
关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
Java中使用SystemClock.sleep时线程会被阻塞吗?如何精确控制睡眠时间?
收起
- 写回答
- 好问题 0 提建议
- 关注问题
微信扫一扫点击复制链接分享
- 邀请回答
- 编辑 收藏 删除 结题
- 收藏 举报
0条回答 默认 最新
报告相同问题?
提交
- 2021-06-05 09:54齐妹爱了爱了的博客 先说结论:SystemClock.sleep() 本质上和 Thread.sleep()是没什么区别的,但有点特殊作用。完整源码(位于 android.os 包下):/*** Waits a given number of milliseconds (of uptimeMillis) before returning.* ...
- 2021-03-17 11:43权艺的博客 SystemClock.sleep()是android提供的函数。在调用该函数的过程中不会发生InterruptedException异常,中断事件将要被延迟直到下一个中断事件。Use this function for delays if you do not useThread.interrupt(), as...
- 2025-07-29 16:07给月亮点灯|的博客 重点讲解了Thread.sleep()方法的作用机制,包括线程阻塞状态、锁保持特性及中断处理;详细分析了线程停止的正确方式,强调避免使用过时的stop()方法,推荐采用标志位+volatile的协作式停止策略。
- 2024-01-16 12:32萤火架构的博客 在我们日常编程的过程中,经常会遇到一个问题:线程的sleep时间似乎并不像我们想象的那样准确,比如我们让线程sleep 100ms,实际sleep的时间经常是大于这个时间的。那么,为什么线程的sleep时间不准确呢?让我们来一...
- 2019-02-18 15:25river66的博客 源码如下: public static void sleep(long ms) { long start = uptimeMillis(); long duration = ms; boolean interrupted = false; do { try { Thread.sleep(duration); ...
- 2016-06-01 16:53zhaokai621的博客 1、SystemClock.sleep(3000); 2、Thread.sleep(3000); 我们每次调用Thread.sleep时可能会出现InterruptedException异常, 而SystemClock.sleep方法则不会, 在 SDK上有这样的描述,它将会忽略中断异常.
- 2016-04-07 20:38manlan123的博客 SystemClock.sleep
- 2025-04-21 16:34Cloud 云艺的博客 本文深入剖析Java线程sleep方法的核心机制与应用场景。sleep方法通过native调用使线程进入TIMED_WAITING状态,不释放监视器锁,支持纳秒级...并提供精确延时控制等高级应用示例,同时指出同步块内使用sleep等常见误区。
- 沐 修的博客 目录join() 的服务对象是子线程sleep()的服务对象是主线程和子线程...sleep()堵塞的是当前的线程,而join()堵塞的是主线程 main,也就是说用了 join() 函数,那么主线程就必须等到该线程执行程序结束为止,才能运行主线
- 2021-06-02 15:07雷宗扬的博客 你可以尝试一下这是 shortSystemClock.sleep(7000);WARNING :永远不要在UI线程上执行此操作 .用它来睡觉,例如 . 背景线程 .您的问题的完整解决方案将是:这是可用的API 1findViewById(R.id.button)....
- 没有解决我的问题, 去提问