What is AbstractQueuedSynchronizer
在Java中concurrent.locks
包用来做什么?有人可以阐明它的方法吗doAcquireInterruptibly
and parkAndCheckInterrupt
?
concurrent.locks 包中的 AbstractQueuedSynchronizer 使用了什么
为了
AbstractQueuedSynchronizer 是在 java.util.concurrency 包中使用和实现(至少)的同步构造的构建块。
例如,ReentrantLock 委托给扩展 AbstractQueuedSynchronizer 的 Sync。如果你要编写自己的锁,它可能看起来像这样
public class MyLock extends AbstractQueuedSynchronizer implements Lock{
@Override
public void lock() {
super.acquire(1);
}
@Override
public void unlock() {
if(Thread.currentThread() != super.getExclusiveOwnerThread())
throw new IllegalMonitorStateException();
super.release(1);
}
}
因此,这里 MyLock 类将继承线程挂起和排队到 AQS 的低级功能,同时处理任何特殊功能本身(例如,此锁要求拥有锁的线程是释放它的线程,但信号量则不需要)。
有人可以解释一下它的方法 doAcquireInterruptically 和
停放并检查中断
注意:这些方法是类的私有方法,因此实际功能可以在不同版本或不同实现之间发生变化。目前我正在解释的默认提供的功能如下:
doAcquireInterruptibly
将尝试成为此同步的独家所有者。它将永远这样做,直到线程被中断或成功获取。考虑一个线程试图进入synchronized
阻塞时,线程将坐在那里并永远等待,直到进入监视器(当前没有线程拥有监视器或拥有该监视器的线程存在)。这里的优点是获取线程可以被中断。
parkAndCheckInterrupt
只是一个方便的方法,它将挂起(停放)线程,在重置中断状态时返回。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)