首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java锁和happend and关系

Java锁和happend and关系
EN

Stack Overflow用户
提问于 2011-10-30 00:49:55
回答 3查看 125关注 0票数 1

我不确定我是否正确地解释了javadoc。当在调用lock方法并成功获得锁之后使用ReentrantLock时,您是否可以访问任何没有任何同步块的对象,并神奇地强制执行发生-之前关系?

我看不到ReentrantLock和我正在处理的对象之间有任何联系,这就是为什么我很难相信我可以安全地处理它们。但事实就是这样,还是我读错了javadoc?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-30 00:59:00

如果线程A修改了由锁保护的代码块CB1内的某个对象,然后释放了锁,而线程B进入了由同一锁保护的代码块,则线程B将在代码块CB1中看到线程A所做的修改。

如果两个线程读取和写入相同的共享状态,则对此状态的每次读取和写入都应由相同的锁保护。

票数 4
EN

Stack Overflow用户

发布于 2011-10-30 00:58:35

这是..。(互斥)锁:

代码语言:javascript
复制
void myMethod()
{

    myLock.lock();  // block until condition holds
    try 
    {
         // Do stuff that only one thread at a time should do
     } 
     finally 
     {
         myLock.unlock()
     }
}

一次只能有一个线程持有锁,因此保证lock()unlock()调用之间的任何东西一次只能由一个线程执行。

The relevant Oracle tutorial can be found here.

票数 2
EN

Stack Overflow用户

发布于 2011-10-30 00:59:04

这里面没有魔法。当且仅当访问一个对象的所有线程都使用相同的锁时,您才是安全的--可以是ReentrantLock锁,也可以是任何其他互斥锁,比如synchronized块。

existence ReentrantLock的理由是它提供了比synchronized更多的灵活性:例如,您可以尝试获取锁-使用synchronized是不可能的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7940247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档