如何解决写锁优先访问java读写锁中的临界区?
我需要写入线程优先于读取线程访问临界区,我可以使用 ReadWriteLock 接口来做到这一点吗?
解决方法
虽然不直接使用 ReadWriteLock
,但最简单的内置方法可能是 Semaphore
,它确实支持公平性。创建一个公平 Semaphore
,(实际上)无限数量的 permis
就足够了:
private static final Semaphore lock = new Semaphore(Integer.MAX_VALUE,true);
public void doReadLocked() throws InterruptedException {
// 'Read' lock only acquires one permit,but since there are A LOT,// many of them can run at once.
lock.acquire();
try {
// Do your stuff in here...
} finally {
// Make sure you release afterwards.
lock.release();
}
}
public void doWriteLocked() throws InterruptedException {
// 'Write' lock demands ALL the permits. Since fairness is set,this
// will 'take priority' over other waiting 'read'ers waiting to acquire
// permits.
lock.acquire(Integer.MAX_VALUE);
try {
// Do your stuff in here...
} finally {
// Make sure you release afterwards.
lock.release(Integer.MAX_VALUE);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。