题目
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 是交替执行的。
