- 1.sleep方法是Thread类的一个静态方法,使当前线程休眠,进入阻塞状态(暂停执行),如果线程在睡眠状态被中断,将会抛出IterruptedException中断异常
- 2.调用sleep方法会让当前线程从Running进入TimedWaiting状态
- 3.睡眠结束后的线程未必会立刻得到执行,因为此时cpu可能正在执行其他线程的代码,等任务调度器把新的时间片分给该线程以后,该线程才能继续运行(sleep时间达到后,线程进入就绪状态)
- 4.建议用TimeUnit的sleep代替Thread的sleep来获得更好的可读性,因为它为时间提供了单位,如:TimeUnit.SECONDS.sleep(1); //表示睡眠1秒
- 5.每一个对象都有一个锁,sleep不会释放锁,当前线程会占据资源,使其他线程也不能使用资源,直到时间结束后,才可以继续运行
- 防止CPU占用100%
- 1.yield方法是Thread类的一个静态方法,会让当前正在执行的线程暂停,注意不是阻塞线程
- 2.调用yield会让当前线程从运行态变为就绪态,进入就绪队列,然后调度执行其他线程
- 3.具体的实现依赖于操作系统的任务调度器
- 4.礼让后,其他线程是可以继续使用资源的
- 5.礼让不是每次都一定成功,礼让有可能失败
- final void join():等待线程运行结束
- final synchronized void join(long millis, int nanos):
- final synchronized void join(long millis):等待线程运行结束,最多等待millis毫秒
- 插队,等待这个线程死亡(如果某个线程调用了这个方法, 那么其它的线程必须等待这个线程执行完毕才有机会执行),此时其它的线程阻塞
- 对于带时间参数的join方法,如果在等待时间结束后线程还没有运行完毕,那么当前插队的线程就会结束运行
- 以调用方角度来讲,如果:
- 如果一个线程需要等待另一个线程结果返回,才能继续运行就是同步
- 如果一个线程不需要等待另一个线程结果返回,就能继续运行就是同步
-
interrupt方法会打断sleep,wait,join的线程,这三个方法都会抛出InterruptException异常(属于checkedException)
-
interrupt方法也会打断正在运行的线程



