原创

LockSupport

温馨提示:
本文最后更新于 2025年06月02日,已超过 376 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

park()和unpark()

park:阻塞线程

unpark:解除阻塞线程

线程等待、唤醒的方法

  • Object中的wait->等待,notify->唤醒线程
  • JUC中Condition的await->等待,signal->唤醒线程
  • LockSupport类,park->等待,unpark->唤醒线程

wait和notify方法,两个都去掉同步代码块,会抛出 IllegalMonitorStateException 异常

wait放在notify前面,程序无法执行,无法唤醒

总结:

  • wait和notify必须在同步代码块或者方法里面,且成对出现使用
  • 先wait后notify

park()和unpark()使用

LockSupport 是用来创建锁和其他同步类的基本线程阻塞原语

LockSupport 类使用了一种名为Permit 许可证的概念来做到阻塞和唤醒线程的功能。每个线程都有一个许可,且最多只有1个许可


调用unpark(thread)方法后,就会将thread线程的许可证permit发放,会自动唤醒park线程,即之前 阻塞中的LockSupport.park()方法会立即返回。


  • 正常+无锁块要求
  • 唤醒与等待的顺序前后皆可
  • 成双成对

示例


正文到此结束