StampedLock是jdk8中新出现的一种改进的读写锁。下面代码给出StampedLock的使用实例,完成了四个函数功能,其中optimisticRead()是尝试使用乐观锁来读取值,conditionReadWrite()的功能是读取balance的值,并判断是否大于0,若大于0,则对balance更新。详细的源代码分析以后将会展示,关于api的介绍可参考StampedLock官方文档。
package com.concur.stampedlock;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.StampedLock;
public class Demo {
private int balance;
private StampedLock lock = new StampedLock();
public Demo() {
balance=10;
}
public void conditionReadWrite (int value) {
// 首先判断balance的值是否符合更新的条件
long stamp = lock.readLock();
while (balance > 0) {
long writeStamp = lock.tryConvertToWriteLock(stamp);
if(writeStamp != 0) { // 成功转换成为写锁
stamp = writeStamp;
balance += value