
package lock.readwrite;import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantReadWriteLock;/*** 描述: 演示ReentrantReadWriteLock可以降级,不能升级*/
public class Upgrading {private static ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(false);private static ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();private static ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();private static void readUpgrading() {readLock.lock();try {System.out.println(Thread.currentThread().getName() + "得到了读锁,正在读取");Thread.sleep(1000);System.out.println("升级会带来阻塞");writeLock.lock();System.out.println(Thread.currentThread().getName() + "获取到了写锁,升级成功");} catch (InterruptedException e) {e.printStackTrace();} finally {System.out.println(Thread.currentThread().getName() + "释放读锁");readLock.unlock();}}private static void writeDowngrading() {writeLock.lock();try {System.out.println(Thread.currentThread().getName() + "得到了写锁,正在写入");Thread.sleep(1000);readLock.lock();System.out.println("在不释放写锁的情况下,直接获取读锁,成功降级");} catch (InterruptedException e) {e.printStackTrace();} finally {readLock.unlock();System.out.println(Thread.currentThread().getName() + "释放写锁");writeLock.unlock();}}public static void main(String[] args) throws InterruptedException {
// System.out.println("先演示降级是可以的");
// Thread thread1 = new Thread(() -> writeDowngrading(), "Thread1");
// thread1.start();
// thread1.join();
// System.out.println("------------------");
// System.out.println("演示升级是不行的");Thread thread2 = new Thread(() -> readUpgrading(), "Thread2");thread2.start();}
}



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!