LockSupport-学习

139 阅读1分钟

原理:

  1. Thread在native实现类有一个成员代表中断状态,interruptState, 初始为false
  2. Thread在native实现中有一个是否可以阻塞的成员,permit,初始为0,只能为0、1

park native伪代码:

park(){
  // 如果permit为1,导致park失效。如先调用unpark再调用park
  if(permit > 0){
      permit = 0;
      return;
  }
  // 中断状态为true,导致park失效。如调用Thread#interrupt
  if(interruptState){
     return;
  }
  
  阻塞线程 // unpark后会从这唤醒
    
  if(permit > 0){
      permit = 0;
  }
}
​

unpark native伪代码:

​
unpark(Thread t){
  if(permit < 1){
      permit = 0;
    if(线程处于阻塞状态){
        唤醒thread
    }
  }
}