编程语言
首页 > 编程语言> > 并发编程-park/unpark原理

并发编程-park/unpark原理

作者:互联网

基本使用

它们是 LockSupport 类中的方法, 可以先unpark 再park

// 暂停当前线程
LockSupport.park(); 

// 恢复某个线程的运行
LockSupport.unpark(暂停线程对象)

与 Object 的 wait & notify 相比

先park在unpark

park流程

image

  1. 当前线程调用 Unsafe.park() 方法
  2. 检查 _counter ,本情况为 0,这时,获得 _mutex 互斥锁
  3. 线程进入 _cond 条件变量阻塞
  4. 设置 _counter = 0

unpark流程

image

  1. 调用 Unsafe.unpark(Thread_0) 方法,设置 _counter 为 1
  2. 唤醒 _cond 条件变量中的 Thread_0
  3. Thread_0 恢复运行
  4. 设置 _counter 为 0

先unpark再park

image

  1. 调用 Unsafe.unpark(Thread_0) 方法,设置 _counter 为 1
  2. 当前线程调用 Unsafe.park() 方法
  3. 检查 _counter ,本情况为 1,这时线程无需阻塞,继续运行
  4. 设置 _counter 为 0

标签:counter,Thread,编程,park,unpark,线程,notify
来源: https://www.cnblogs.com/mpyidudu/p/15733696.html