gpt4 book ai didi

java - 线程阻塞时会做什么

转载 作者:行者123 更新时间:2023-11-29 04:22:18 25 4
gpt4 key购买 nike

我想知道当锁被另一个线程持有时,一个线程会做什么。
是否重试获取锁?
如果答案是肯定的,那么在两次重试之间是否会等待片刻,重试周期是多长时间?
如果答案是否定的,那么它如何知道锁何时被释放?

==更新==
我说的是 synchronized 创建的锁,叫做 Intrinsic Lock .

最佳答案

从根本上说,有两种常见的锁:

  • 自旋锁:这类似于您所描述的;线程将循环(可能会抛出一个依赖于实现的 sleep )直到锁被释放,在等待的同时不断地轮询它。

  • 互斥锁:这使用某种内核资源——具体取决于操作系统,但通常内核负责让线程 hibernate (阻塞)并在互斥锁关闭时将其唤醒可用。

据我所知,所有 Java 的锁都以第二种方式工作——内核知道互斥量何时被另一个线程释放并重新安排等待线程。您的代码只会在锁准备就绪时再次运行。

您可能会在较低级别的代码(例如内核本身!)中看到自旋锁,或者在等待时间非常短的地方看到没有必要让线程 hibernate 以等待它被释放(那仅当系统具有多个内核时才有效,否则它无法同时运行需要释放锁的线程和等待它的线程——它必须重新安排)

关于java - 线程阻塞时会做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48352809/

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