关于线程、锁和CPU调度的问题

来源:5-10 公平锁

Supers1st

2021-11-11

假设有五个线程等待CPU的调度,五个线程需要去争夺一把互斥锁,假设被线程1拿到了,则线程2、3、4、5都处于Blocked状态,但是由于线程1运行比较耗时,在一个时间片中没有运行完,线程1应该就会失去cpu的调度,进入阻塞状态,此时线程1会释放锁吗?如果不释放锁,当cpu重新调度时,是否只能执行线程1?即只有当线程1运行完毕且释放锁之后其他线程才可能拿到锁,得到cpu的执行权。拿到锁的那个线程会独得cpu恩宠,直到运行完毕,不管她占用了多少的时间片。

写回答

1回答

悟空

2021-11-11

失去cpu的调度,进入阻塞状态,此时线程1不会释放锁,当线程1运行完毕且释放锁之后其他线程才可能拿到锁,得到cpu的执行权。阻塞时,不会浪费CPU。

0
2
悟空
回复
慕沐3053333
失去cpu的调度是背后的动作,隐含在进入阻塞状态的动作里,比如执行wait方法,就会导致失去cpu的调度
2022-12-21
共2条回复

深度解密Java并发工具,精通JUC,成为并发多面手

JUC全方位讲解,构建并发工具类知识体系

1599 学习 · 573 问题

查看课程