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线程,从而达到同步的目的。

 

posted @ 2020-02-03 16:55  LPJのBLOG  Views(90)  Comments(0)    收藏  举报