我想要知道的是,当一个线程进入一个锁定时,它是否意味着它“结束”,或者只是它已经完成使用该函数或代码,该代码使用了对象,该对象的监视器是特定的线程。在?
答案 0 :(得分:1)
它已经完成了使用该功能或使用该对象的代码。这些代码段通常称为critical section(s)。
答案 1 :(得分:0)
为了您的一般理解:方法在线程上运行。因此,一个方法可能同时由多个线程执行。
想象一下,您希望确保方法或其中的一部分一次只能由一个线程执行。这被称为关键部分。
Java中的一个关键部分可以通过锁保护:隐式地通过synchronized或通过java.util.concurrent.locks明确保护。
一次只有一个线程可以获取锁定并进入关键部分需要先获取锁定。在关键部分结束时,锁被释放,线程继续运行,但现在没有持有锁。
遇到另一个线程(不一定是同一个关键部分)持有的锁的线程无法在该点继续,必须等待。线程和等待同一锁的其他线程将在重试获取锁时得到通知。同样,只有一个线程会赢,并且重复该过程(例如,除非你有一个deadlock)。