我对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