【发布时间】:2021-07-05 14:18:58
【问题描述】:
如果我有一个线程被阻塞等待锁定,操作系统是否可以重新安排该线程执行其他工作,直到锁定可用? 据我了解,它不能被重新安排,它只是闲置直到它可以获取锁。但这似乎效率低下。如果我们有 100 个任务提交给 ExecutorService,并且池中有 10 个线程:如果其中一个线程持有锁,而其他 9 个线程正在等待该锁,那么只有持有锁的线程才能取得进展。我原以为可以暂时重新安排被阻塞的线程来运行其他一些提交的任务。
【问题讨论】:
-
Java 线程和本机线程不是一回事。操作系统的调度程序可以使用本机线程做任何事情,而且它也对你的锁一无所知。我想你真正关心的可能是 Java 线程是如何实现的。
-
你的意思是,理论上,本地线程可以被重新调度以运行其他任务,但是 Java 不是这样设计的并且阻止它发生?
-
您是否对此类用例的解决方案感兴趣,或者您对 Java 可以做什么感兴趣?
-
@alfer hehe 你真的被困住了:P,基本上你又得到了同样的答案
-
@alfer 是的,这是真的 :),你很好奇这对程序员来说是个好主意
标签: java multithreading operating-system