小编Ryu*_*Ryu的帖子

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

我对Java中的代码重新排序和竞争条件有疑问.

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

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

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

sharedObject++;
lock.lock();
lock.unlock();
Run Code Online (Sandbox Code Playgroud)

或者是否保证锁不会被重新排序?

java concurrency multithreading thread-safety java.util.concurrent

12
推荐指数
1
解决办法
601
查看次数