java内部锁可能会被多个线程同时获得么?

《java并发编程》P28的2.4一段话“对象的内部锁与它的状态之间没有内在的关系。尽管大多数类普及使用这样一种非常有效的锁机制:用对象的内部锁来保护所有的域,然而这并不... 《java并发编程》P28 的2.4 一段话


对象的内部锁与它的状态之间没有内在的关系。尽管大多数类普及使用这样一种非常有效的锁机制:用对象的内部锁来保护所有的域,然而这并不是必须的。即使获得了与对象关联的锁也不能阻止其他线程访问这个对象——获得对象的锁后,唯一可以做的事情是阻止其他线程再获得相同的锁。作为一种便利,每个对象都有一个内部锁,所以你不需要显示地创建锁对象。你可以构造自己的锁协议或同步策略,使你可以安全地访问共享状态,并且贯穿程序始终如一使用它们。


有点费解,难道内部锁默认会被多个线程同时得到么?内部锁不是
public class PrivateLock{

private final Object myLock=new Object();
Widget widget;

void someMethod(){
synchronized(myLock){
//访问修改Widget
}
}

}

中的myLock这样的对象么,这个内部锁会有被线程A和B同时获得的情况么?
我觉得内部锁和私有锁不可能同时被多个线程获得啊?
展开
 我来答
雾明冰清
2014-05-03 · TA获得超过419个赞
知道小有建树答主
回答量:217
采纳率:33%
帮助的人:125万
展开全部
除了可重入锁之外其他锁都能被多个线程同时获得。你的问题里已经说明了:

获得对象的锁后,唯一可以做的事情是阻止其他线程再获得相同的锁。
追问
那应该怎么阻止其他线程获得锁呢?可以举一个demo么?
追答
锁的功能不就是你得到锁别人就不能再获得了吗?你不释放别人就无法获得锁,还要怎么阻止别的线程获得锁。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式