在 Java 中,可以使用 synchronized 關鍵字或者 ReentrantLock 類來實現樂觀鎖。下面分別給出兩種實現方式的示例代碼:
public class OptimisticLockExample {
private int count = 0;
public synchronized void increment() {
int oldValue = count;
int newValue = oldValue + 1;
// 模擬耗時操作
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count = newValue;
}
public static void main(String[] args) {
OptimisticLockExample example = new OptimisticLockExample();
Thread t1 = new Thread(() -> {
example.increment();
});
Thread t2 = new Thread(() -> {
example.increment();
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Final count: " + example.count);
}
}
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class OptimisticLockExample {
private int count = 0;
private Lock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
int oldValue = count;
int newValue = oldValue + 1;
// 模擬耗時操作
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
count = newValue;
} finally {
lock.unlock();
}
}
public static void main(String[] args) {
OptimisticLockExample example = new OptimisticLockExample();
Thread t1 = new Thread(() -> {
example.increment();
});
Thread t2 = new Thread(() -> {
example.increment();
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Final count: " + example.count);
}
}
以上是兩種在 Java 中實現樂觀鎖的方式,分別使用 synchronized 關鍵字和 ReentrantLock 類。在實際開發中,可以根據具體場景選擇合適的方式來實現樂觀鎖。