Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java';s ReentrantLock是否获得锁定?_Java_Locking - Fatal编程技术网

Java';s ReentrantLock是否获得锁定?

Java';s ReentrantLock是否获得锁定?,java,locking,Java,Locking,当使用Java的ReentrantLock时,它实际上锁定了什么对象?是try块中使用的对象,还是使用ReentrantLock的整个对象/类 谢谢。我认为您有点误解了java中的“锁”(任何锁)是如何工作的(默认的同步行为有点混淆了这一点)。在对象上同步不会“锁定”该对象。它只锁定在同一对象上同步的其他调用。类似地,ReentrantLock不会“锁定”对象,它只针对同一ReentrantLock上的其他锁调用进行锁定。我认为您有点误解了java中的“锁”(任何锁)是如何工作的(默认的同步行为

当使用Java的ReentrantLock时,它实际上锁定了什么对象?是try块中使用的对象,还是使用ReentrantLock的整个对象/类


谢谢。

我认为您有点误解了java中的“锁”(任何锁)是如何工作的(默认的同步行为有点混淆了这一点)。在对象上同步不会“锁定”该对象。它只锁定在同一对象上同步的其他调用。类似地,ReentrantLock不会“锁定”对象,它只针对同一ReentrantLock上的其他锁调用进行锁定。

我认为您有点误解了java中的“锁”(任何锁)是如何工作的(默认的同步行为有点混淆了这一点)。在对象上同步不会“锁定”该对象。它只锁定在同一对象上同步的其他调用。同样,ReentrantLock不会“锁定”对象,它只会锁定同一ReentrantLock上的其他锁调用。

lock
只是一个接口,所以它锁定的东西取决于实现。你说得对,我是说ReentrantLock。
lock
只是一个接口,所以它锁定的东西取决于实现。你是对的,我的意思是ReentrantLock。但是当你在块中使用synchronized时,它会阻止对()中放入的任何变量进行锁定,对吗?@Sepher78:synchronized会阻止线程获取当前使用的锁,因此,调用同步块/方法的线程在获得锁之前无法继续。这就是synchronized所做的一切。这是什么意思?如果我做了同步(obj){},这不意味着obj被锁定在下面的代码块中吗?不,这不意味着“obj”被锁定。无法锁定对象。这意味着任何其他试图执行“synchronized(obj)”的线程都将阻塞。但是,当在块中使用synchronized时,它会阻止对()中放入的任何变量进行锁定,对吗?@sepher78:synchronized会阻止线程获取当前使用的锁,因此,调用同步块/方法的线程在获得锁之前无法继续。这就是synchronized所做的一切。这是什么意思?如果我做了同步(obj){},这不意味着obj被锁定在下面的代码块中吗?不,这不意味着“obj”被锁定。无法锁定对象。这意味着任何其他试图执行“同步(obj)”的线程都将阻塞。