题目
Thread.sleep() 有什么用?sleep(0) 有什么用?
答案
sleep(timeout) 的意思是,线程丢掉 CPU 时间片,挂起 timeout 秒,进入等待态(等待队列中的线程是不参与 CPU 调度的),timeout 秒之后,再转入就绪态,开始等候 CPU 调度。 从字面上来看,sleep(0) 是让线程挂起 0 秒,看起来没啥用。 **当一个线程调用 Thread.sleep(0) 方法时,它会立即放弃自己的 CPU 时间片,然后直接进入就绪态,继续参与 CPU 调度,使得其他等待线程有机会先执行,如果没有其他等待线程,则当前线程会继续执行。这种方式可以防止当前线程长时间占用 CPU 而导致其他线程无法执行的问题,从而提高系统的并发性能**。 下面是一个简单的示例代码,演示了如何使用 Thread.sleep(0) 方法让线程放弃 CPU 时间片: ```java public class SleepZeroDemo { public static void main(String[] args) { Thread t1 = new Thread(() -> { System.out.println("Thread 1 start"); Thread.sleep(0); System.out.println("Thread 1 end"); }); Thread t2 = new Thread(() -> { System.out.println("Thread 2 start"); System.out.println("Thread 2 end"); }); t1.start(); t2.start(); } } ``` 运行下你就会发现 Thread1 和 Thread2 是交替执行的。