AQS是如何实现线程的等待和唤醒的 ?
一、AQS是如何实现线程的等待和唤醒的 ?
AQS中线程等待和唤醒主要依赖 park 和 unpark 实现的。
当一个线程尝试获取锁或者同步器时,如果获取失败,AQS会将该线程封装成一个Node并添加到CLH等待队列中,然后通过 LockSupport.park() 将该线程阻塞。
当一个线程释放锁或者同步器时,AQS会通过 LockSupport.unpark() 方法将等待队列中的第一个线程唤醒,并让其重新尝试获取锁或者同步器。
一、AQS是如何实现线程的等待和唤醒的 ?
AQS中线程等待和唤醒主要依赖 park 和 unpark 实现的。
当一个线程尝试获取锁或者同步器时,如果获取失败,AQS会将该线程封装成一个Node并添加到CLH等待队列中,然后通过 LockSupport.park() 将该线程阻塞。
当一个线程释放锁或者同步器时,AQS会通过 LockSupport.unpark() 方法将等待队列中的第一个线程唤醒,并让其重新尝试获取锁或者同步器。
