gpt4 book ai didi

java - Java并发中的AbstractQueuedSynchronizer

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:35 24 4
gpt4 key购买 nike

Java 的concurrent.locks 包中的AbstractQueuedSynchronizer 是做什么用的?有人可以阐明它的方法 doAcquireInterruptiblyparkAndCheckInterrupt 吗?

最佳答案

What is AbstractQueuedSynchronizer in concurrent.locks package used for

AbstractQueuedSynchronizer 是在 java.util.concurrency 包中使用和实现(至少)的同步构造的构建 block 。

例如,ReentrantLock 委托(delegate)给扩展 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 的低级功能,同时处理任何特殊功能本身(例如,这个锁要求拥有锁的线程是释放它的线程,但信号量不).

Can someone throw some light on its methods doAcquireInterruptibly and parkAndCheckInterrupt

注意:这些方法是类私有(private)的,因此实际功能可以在不同版本或不同实现之间发生变化。目前我正在解释的默认提供的功能如下:

doAcquireInterruptibly 将尝试成为此同步的独占所有者。它会一直这样做,直到线程被中断或成功获取。考虑一个线程试图进入一个synchronized block ,该线程将坐在那里并永远等待直到它进入监视器(当前没有线程拥有或拥有线程存在监视器)。这里的好处是获取线程可以被中断。

parkAndCheckInterrupt 只是一种挂起(停放)线程的便捷方法,在重置中断状态时返回。

关于java - Java并发中的AbstractQueuedSynchronizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9644856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com