Untitled

Untitled

start() 和 run() 的区别

直接调用 run 是在主线程中执行了 run,没有启动新的线程。而使用 start 是启动新的线程,通过新的线程间接执行 run 中的代码

sleep() 和 yield()

sleep():

  1. 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)

  2. 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException

    Untitled

  3. 睡眠结束后的线程未必会立刻得到执行,因为睡眠结束时 CPU 可能正在执行其他的代码

  4. 建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性

    Untitled

yield():

  1. 调用 yield 会让当前线程从 Running 进入 Runnable 就绪状态,然后调度执行其它线程
  2. 具体的实现依赖于操作系统的任务调度器

使用演示,线程 2 的时间片被让给线程 1:

Untitled

线程优先级设置

案例:防止 CPU 占用 100%