start()
和 run()
的区别直接调用 run 是在主线程中执行了 run,没有启动新的线程。而使用 start 是启动新的线程,通过新的线程间接执行 run 中的代码
sleep()
和 yield()
sleep()
:
调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞)
其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException
睡眠结束后的线程未必会立刻得到执行,因为睡眠结束时 CPU 可能正在执行其他的代码
建议用 TimeUnit 的 sleep 代替 Thread 的 sleep 来获得更好的可读性
yield()
:
使用演示,线程 2 的时间片被让给线程 1: