gpt4 book ai didi

Java线程: Query regarding Thread waiting state

转载 作者:行者123 更新时间:2023-12-01 14:19:03 24 4
gpt4 key购买 nike

假设我有一个同步块(synchronized block),并且有 1000 个线程同时访问该 block ,并且一个线程访问同步块(synchronized block)。其他999个线程将进入等待状态,直到收到通知。我想知道这 999 个线程到底在哪里处于等待状态。哪种数据结构用于在等待状态下保存这 999 个线程,以及一旦它们收到通知,jvm 如何选择一个线程来访问同步块(synchronized block)。还有任何涵盖线程同步和线程监视器的最佳文章。我用谷歌搜索了一下,但仍然困惑同步在内部是如何工作的。

谢谢

最佳答案

在java线程中是user level threads 。与内核级线程不同,它们由客户端库管理。该库负责处理这些线程的状态。例如,即使 1000 个线程中的 10 个线程正在处理 10 个不同的资源,并且其中 1 个线程进行系统调用,那么(该进程的)所有线程都会被内核阻塞。然而对于用户库来说,只有进行系统调用的一个线程被阻塞,而其他线程则处于运行状态。

此外,也无法保证哪个线程将获取下一个锁。如果你想要公平你可以使用ReentrantLock它提供了比同步块(synchronized block)更多的功能。它还具有一个可选的公平参数,如果设置为 true 将为等待时间最长的线程提供锁定。

关于Java线程: Query regarding Thread waiting state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807988/

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