JUC练习6——读写锁
读写锁:
* 写操作需要独占锁,只允许一个进行进行写操作
* 读操作时共享锁,运行多个进行同时进行都操作
应用场景:
代码示例:
import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; public class JucTest8 { public static void main(String[] args) { /** * 读写锁: * 写操作需要独占锁,只允许一个进行进行写操作 * 读操作时共享锁,运行多个进行同时进行都操作 */ Book book = new Book(); for (int i=1;i<=3;i++) { new Thread(()-> { book.writing(); },"A"+i).start(); new Thread(()-> { book.reading(); },"B"+i).start(); } } } class Book { ReadWriteLock lock = new ReentrantReadWriteLock(); void writing() { lock.writeLock().lock(); try { System.out.println(Thread.currentThread().getName()+"进行写操作"); //TimeUnit.SECONDS.sleep(2); System.out.println(Thread.currentThread().getName()+"写入完成"); }catch (Exception e) { e.printStackTrace(); } finally { lock.writeLock().unlock(); } } void reading() { lock.readLock().lock(); try { System.out.println(Thread.currentThread().getName()+"进行读操作"); //TimeUnit.SECONDS.sleep(2); System.out.println(Thread.currentThread().getName()+"读完成"); }catch (Exception e) { e.printStackTrace(); } finally { lock.readLock().unlock(); } } }