4 Yield/Sleep/Join
线程让步
Yield : 线程从运行进入就绪状态 + 不释放锁
yield()的作用是让步。它能让当前线程由“运行状态”进入到“就绪状态”,从而让其它具有相同优先级的等待线程获取执行权;但是,并不能保证在当前线程调用yield()之后,其它具有相同优先级的线程就一定能获得执行权;也有可能是当前线程又进入到“运行状态”继续运行!
线程休眠
Sleep : 让当前线程进入休眠阻塞状态 + 不释放锁
sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。sleep()会指定休眠时间,线程休眠的时间会大于/等于该休眠时间;在线程重新被唤醒时,它会由“阻塞状态”变成“就绪状态”,从而等待cpu的调度执行。
join
join() 的作用:让“主线程”等待“子线程”结束之后才能继续运行。
Join 和start 的调用顺序::join方法必须在线程start方法调用之后调用才有意义。在多个子线程的情况下,若依次执行每个线程的start()和join()方法,则各个线程之间是同步的。
从源码中可以看到:join方法的原理就是调用相应线程的wait方法进行等待操作的,例如A线程中调用了B线程的join方法,则相当于在A线程中调用了B线程的wait方法,当B线程执行完(或者到达等待时间),B线程会自动调用自身的notifyAll方法唤醒A线程,从而达到同步的目的。

浙公网安备 33010602011771号