一 . 概述
在并发的经典场景之中,有一个读者和写者的问题.其中描述的问题是有写者和读者完成对一个资源的访问,其中读者可以共享的访问的
资源,而写者只能独占的访问资源.
我们看到这个场景之中有独占和共享两个概念.
二 . 读写锁
在JUC之中提供了一个读写锁,通过读写锁可以完成对资源的读写操作,其中体现了读写分离的作用,
public class ReadWriteTest { public static void main(String[] args) { // ReadWriteLock lock = new ReentrantReadWriteLock(true); // 创建读锁 Lock readLock = lock.readLock(); // 创建写锁 Lock writeLock = lock.writeLock(); // 定义多个读者线程,他们可以并发的访问资源 for (int x = 0; x < 3; x++) { new Thread(new Runnable() { @Override public void run() { try { readLock.lock(); System.out.println("读者运行中..."); try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } }finally { readLock.unlock(); } } }).start(); } //创建写者 for (int x = 0; x < 3; x++) { new Thread(new Runnable() { @Override public void run() { try { writeLock.lock(); try { System.out.println("写者运行中..."); TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } }finally { writeLock.unlock(); } } }).start(); } } }
我们可以观察到我们的读操作确实是并行的,而写操作是独占式的.