Java多线程Day06-多线程之线程让步

tech2022-12-30  114

线程让步

基本概念yield()与wait()比较相同点不同点

基本概念

yield() 的作用: 线程让步 可以让当前线程由 [运行状态] 进入到 [就绪状态]从而让其余具有相同优先级的 [等待线程] 获得执行权 不能保证在当前线程调用yield() 之后,其余具有相同优先级的 [等待线程] 就一定能获得执行权.因为当前线程可能又会进入到 [运行状态] 继续运行

yield()与wait()比较

线程让步之后,并不会释放锁.因此,其余线程也没机会获得锁,只能是当前线程执行完之后,才会释放对象的同步锁既然yield() 不释放锁,为什么还要放弃执行权呢? 即便放弃了执行权,其余线程也无法获取锁? yield() 一般用于不存在锁竞争的多线程环境中如果当前线程执行的任务时间可能比较长,就可以选择用yield() 方法,暂时让出CPU执行权.让其余线程也有机会执行任务,而不至于让CPU资源一直消耗在当前线程

相同点

yield() 的作用是让步,会让当前线程离开 [运行状态]wait() 的作用等待,也会让当前线程离开 [运行状态]. 会进入等待阻塞状态,同时会释放对象的同步锁

不同点

yield() 是让当前线程由 [运行状态] 进入到 [就绪状态]. wait() 是让线程由 [运行状态] 进入到 [等待者阻塞状态]yield() 方法不会让当前线程释放持有的对象的同步锁 .wait() 方法会让当前线程释放持有的对象的同步锁
最新回复(0)