Java多线程Day06-线程让步

基本概念

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

yield()与wait()比较

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

相同点

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

不同点

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

猜你喜欢

转载自blog.csdn.net/JewaveOxford/article/details/108380307