位置:首页 > Java > 线程休眠原因及解决方法详解

线程休眠原因及解决方法详解

时间:2026-08-15  |  作者:穿越地图的猫  |  阅读:0

线程休眠方法 sleep()

前面已经提到过线程优先级:优先级高的线程,通常拿到先执行机会的概率更大;优先级低的线程,则可能排在后面。

如果希望人为干预线程的执行节奏,让当前正在运行的线程先停一停,把 CPU 的使用权让给其他线程,这时候就可以用静态方法sleep(long millis)。

这个方法会让当前线程暂停一段时间,进入休眠等待状态,于是其他线程就有机会获得执行。

需要注意的是,sleep(long millis)方法会声明抛出InterruptedException异常,所以调用它时,要么捕获这个异常,要么继续声明抛出。

sleep()方法使用示例

接下来通过案例演示一下sleep()方法在程序中的使用,如文件1所示。

文件1 Example08.ja va

 1    public class Example08 {
 2        public static void main(String[] args) {
 3            // 分别定义两个Thread线程对象
 4            Thread thread1 = new Thread(() -> {
 5                for (int i = 0; i < 10; i++) {
 6                    System.out.println(Thread.currentThread().getName()
 7                                         + "正在输出i:" + i);
 8                    if(i ==2){
 9                        try {
 10                            // 在该线程执行过程中进入睡眠状态,让其他线程先执行
 11                            Thread.sleep(500);
 12                        } catch (InterruptedException e) {
 13                            e.printStackTrace();
 14                        }
 15                    }
 16                }
 17            });
 18            Thread thread2 = new Thread(() -> {
 19                for (int j = 0; j < 10; j++) {
 20                    System.out.println(Thread.currentThread().getName()
 21                                         + "正在输出j:" + j);
 22                }
 23            });
 24            // 开启两个线程 
 25            thread1.start();
 26            thread2.start();
 27        }
 28    }

运行结果如图1所示。

线程休眠原因及解决方法详解_wishdown.com

图1 运行结果

示例分析

文件1中开启了两个线程,同时在thread1线程执行过程中调用了Thread的sleep(500)方法。

它的目的是让一个线程在执行的某一时刻休眠500毫秒,从而使另一个线程获得执行的机会。

正常情况下,这两个线程会争相获取CUP执行权并交互打印输出信息。

从图1可以看出,当thread1执行到i==2时,就会进入休眠状态。

此时可以看到thread2线程一直会获得CUP使用权,直到thread1线程休眠时间消耗完成才有机会获得CUP使用权。

需要注意的问题

有一点很容易被忽略:线程类Thread一共提供了两个休眠方法——sleep(long millis)和sleep(long millis, int nanos)。

这两个方法都明确带有休眠时长参数。

所以,即便其他线程已经全部结束,也不意味着当前处于休眠中的线程会立刻继续执行。

它必须等到休眠时间真正结束之后,才会转入就绪状态。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多