你确定?不是用aqs吗
时间: 2023-12-13 19:02:58 浏览: 26
抱歉,我的回答有误。Java中的Future类的get方法并不是通过调用wait()方法实现的,而是通过AQS(AbstractQueuedSynchronizer)来实现的。在FutureTask中,当调用get方法时,如果还没有完成计算,它会创建一个线程来计算结果,并在AQS上等待结果。一旦计算完成,FutureTask会通过AQS来通知等待的线程,使其重新争取对象锁并返回计算结果。所以,AQS是Future类的get方法实现的关键。非常感谢您的纠正。
相关问题
synchronized使用aqs吗
synchronized并不使用AQS(AbstractQueuedSynchronizer)。AQS是一个用于构建锁和其他同步器的框架,它提供了基于FIFO队列的阻塞和唤醒线程的机制。虽然ReentrantLock使用了AQS来实现,但synchronized是Java中内置的关键字,不需要使用AQS来进行同步操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [总结:一文死磕 synchronized 和 AQS 系](https://blog.csdn.net/u012373815/article/details/111035234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
CAS和AQS了解吗?原理是什么?
CAS是Compare and Swap(比较与交换)的缩写,是一种CPU指令,用于实现并发控制。AQS是AbstractQueuedSynchronizer(抽象队列同步器)的缩写,是Java中用于实现锁等同步器的抽象类。
CAS的原理是使用一个期望值和一个新值进行比较,如果当前值和期望值相同,则使用新值替换当前值。CAS是一种乐观锁机制,多用于无锁算法和非阻塞算法中。
AQS的原理是利用一个FIFO双向链表和一个状态变量来实现线程的排队和状态的判断和变更。AQS提供了acquire()和release()方法,通过这些方法来协调线程间的竞争关系,实现锁等同步器的功能。
总的来说,CAS和AQS都是用于实现并发控制等同步机制的,它们的原理各有不同,但都是基于底层硬件指令或Java语言实现的。