加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Lock是否保证发生之前的关系?

发布时间:2020-12-14 16:30:03 所属栏目:Java 来源:网络整理
导读:我有一个 Java代码重新排序和竞争条件的问题. 假设我有以下代码,同时执行2个或更多的线程workForThread(): public class Job { private Lock lock = new ReentrantLock(); private int sharedObject = 1; public void workForThread() { lock.lock(); try {
我有一个 Java代码重新排序和竞争条件的问题.

假设我有以下代码,同时执行2个或更多的线程workForThread():

public class Job {
   private Lock lock = new ReentrantLock();
   private int sharedObject = 1;
   public void workForThread() {
       lock.lock();
       try {
           sharedObject++;
       } finally {
           lock.unlock();
       }
   }
}

JVM是否可能以错误的顺序执行?例如,以下是否可以重新排序?

sharedObject++;
lock.lock();
lock.unlock();

还是保证锁不会重新排序?

解决方法

我们来看看Java文档关于Lock界面的内容:

All Lock implementations must enforce the same memory synchronization
semantics as provided by the built-in monitor lock,as described in
section 17.4 of The Java? Language Specification:

A successful lock operation has the same memory synchronization
effects as a successful Lock action.

A successful unlock operation has
the same memory synchronization effects as a successful Unlock action.

所以你的问题的答案是肯定的.锁定给你同样的重新排序保证,一个常规的同步块/方法会.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读