import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class MyResource { private ReadWriteLock lock = new ReentrantReadWriteLock(); private int value; public int getValue() { lock.readLock().lock(); try { return value; } finally { lock.readLock().unlock(); } } public void setValue(int value) { lock.writeLock().lock(); try { this.value = value; } finally { lock.writeLock().unlock(); } } } import java.util.concurrent.locks.StampedLock; public class MyResource { private StampedLock lock = new StampedLock(); private int value; public int getValue() { long stamp = lock.tryOptimisticRead(); int currentValue = value; if (!lock.validate(stamp)) { stamp = lock.readLock(); try { currentValue = value; } finally { lock.unlockRead(stamp); } } return currentValue; } public void setValue(int value) { long stamp = lock.writeLock(); try { this.value = value; } finally { lock.unlockWrite(stamp); } } }


上一篇:
下一篇:
切换中文