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();
        }
    }
}

  

 

posted @ 2022-01-14 13:05  陈建江  阅读(28)  评论(0编辑  收藏  举报