锁的使用至关重要
副问题[/!--empirenews.page--]
独有锁的实现,拥有上面罗列的除读写锁之外的全部特征,行使较量简朴 class X { // 建设独有锁实例 private final ReentrantLock lock = new ReentrantLock(); // ... public void m() { lock.lock(); // block until condition holds try { // ... method body } finally { // 必必要开释锁,unlock与lock成对呈现 lock.unlock() } } } ReentrantReadWriteLock读写锁的实现,拥有上面罗列的全部特征。而且写锁可降级为读锁,反之不可。 class CachedData { Object data; volatile boolean cacheValid; final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock(); void processCachedData() { rwl.readLock().lock(); if (!cacheValid) { // Must release read lock before acquiring write lock rwl.readLock().unlock(); rwl.writeLock().lock(); try { // Recheck state because another thread might have // acquired write lock and changed state before we did. if (!cacheValid) { data = ... cacheValid = true; } // Downgrade by acquiring read lock before releasing write lock rwl.readLock().lock(); } finally { rwl.writeLock().unlock(); // Unlock write, still hold read } } try { use(data); } finally { rwl.readLock().unlock(); } } } StampedLockStampedLock也是一种读写锁,提供两种读模式:乐观读和气馁读。乐观读应承读的进程中也可以获取写锁后写入!这样一来,我们读的数据就也许纷歧致,以是,必要一点特另外代码来判定读的进程中是否有写入。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |