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%