初始状态:
表示系统或资源在没有线程持有锁的情况下的状态,任何线程都可以尝试获取锁。
线程 1 获得锁:
线程 1 首次获取了锁并进入受保护的代码区域。
线程 1 再次请求锁:
在持有锁的情况下,线程 1 再次请求锁,展示了可重入锁的特性——线程可以在持有锁的情况下重新进入锁区域而不会阻塞。
线程 1 释放锁:
线程 1 完成任务,开始释放锁。在可重入锁的情况下,需要释放与请求次数相同的次数,线程 1 完全释放锁后,锁恢复到初始状态。
线程 2 等待锁:
当线程 1 持有锁时,线程 2 试图获取锁但被阻塞,进入等待状态。这个节点表示线程 2 被阻塞等待的状态。
线程 2 获得锁:
线程 1 完全释放锁后,锁恢复为初始状态,线程 2 能够获取锁,进入受保护的代码区域。
线程 2 释放锁并返回初始状态:
线程 2 完成任务后,释放锁,系统回到初始状态,其他线程可以尝试获取锁。