根据我的理解,如果我们在代码中添加synchronized关键字,其中的整个代码块将被锁定用于其他线程。在这种情况下,为什么我们需要在synchronized关键字中指定特定对象。 例如。的同步(lockObject)即可。 lockObject在这里有什么用?
答案 0 :(得分:1)
如果我们在代码中添加synchronized关键字,其中的整个代码块将被锁定为其他线程。
不正确的。 synchronized
涉及一种完全独立于您的代码块的机制:获取和释放互斥锁。 Java具有synchronized
块的概念,以方便确保在获取锁之后正确释放锁。
因此,实际发生的是您的线程获取与括号中给出的实例关联的监视器,然后继续执行代码块,然后释放监视器。同时没有其他线程可以获取特定的监视器,但它可以很好地获取任何其他对象的监视器。如果您不注意始终在同步块中包含相同的对象,则不会相互排斥。
答案 1 :(得分:1)
假设您有两个要同步的资源;浴室和冰箱。
即使有人在使用浴室,你也希望人们能够从冰箱里取出小吃,不是吗?
所以你在冰箱和浴室使用不同的锁。
在编程术语中,这意味着每个独立资源都可以拥有它自己的lockObject。
请注意,资源可以有多种方法来访问它们 - 同一资源的所有访问者都应使用相同的锁!毕竟,如果你有两扇门进入浴室,如果你只锁定其中一扇门,它就不会有多大好处。