说监视器或锁可以拥有是否正确?

时间:2016-03-11 06:30:15

标签: java multithreading concurrency

我相信我已经看过表达式"拥有一台显示器"并且"拥有一把锁"。我想验证只有一台显示器可以拥有"拥有"。并且锁定是"获得"而不是拥有。如果那是错的,我会很高兴正确使用"拥有"并且"在Java多线程的上下文中获取"

2 个答案:

答案 0 :(得分:5)

锁是一种数据,它在逻辑上是堆内存中对象头的一部分。 JVM中的每个对象都有这个锁(或互斥),任何程序都可以使用它来协调多个线程访问对象。如果任何线程想要访问该对象的实例变量;然后线程必须“拥有”对象的锁(在锁定存储区中设置一些标志)。尝试访问对象变量的所有其他线程必须等到拥有线程释放对象的锁定(取消设置标志)。

一旦线程拥有锁定,它就可以多次再次请求相同的锁定,但是在锁定之前必须释放锁定相同的次数可用于其他主题。例如,如果线程请求锁定三次,那么该线程将继续拥有锁定,直到它“释放”三次。

Monitor是一种同步构造,它允许线程同时具有互斥(使用锁定)和协作,即使线程等待某些条件为真的能力(使用wait-set)。 / p>

换句话说,与实现锁定的数据一起,每个Java对象在逻辑上与实现等待的数据相关联。锁可以帮助线程独立地在共享数据上工作而不会相互干扰,而等待集可以帮助线程彼此协作以共同努力实现共同目标,例如:所有等待的线程都将被移动到此等待集,并且一旦锁定被释放,所有线程都会收到通知。这个等待集有助于构建监视器,并提供锁定(互斥)的额外帮助。

enter image description here

答案 1 :(得分:1)

如果没有共享锁(即只能获得一次锁),那么持有单一锁的人当前就是该锁的“拥有者”。

synchronized块的情况下,只允许一个Thread同时获取锁(这就是整个目的)。所以Thread会“拥有锁”。