热门IT资讯网

java读写锁怎么用

发表于:2024-11-23 作者:热门IT资讯网编辑
编辑最后更新 2024年11月23日,这篇"java读写锁怎么用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"java读写

这篇"java读写锁怎么用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"java读写锁怎么用"文章吧。

1、公平选择性,支持非公平和公平锁获取,吞吐量不公平优于公平。

2、重进入,读锁和写锁都支持线程重进入。

3、锁降级,遵循获取写锁、获取读锁、释放写锁的顺序,写锁可以降级为读锁。

实例

public class ReadWriteLockTest {    public static void main(String[] args) {         final Queue q = new Queue();         for (int i = 0; i < 3; i++) {             new Thread() {                @Override                public void run() {                     while (true) {                        q.get();                    }                }            }.start();             new Thread() {                @Override                public void run() {                    while (true) {                        q.put(new Random().nextInt(10000));                    }                }            }.start();        }    }} class Queue {     //共享数据,只能有一个线程能写该数据,但可以有多个线程同时读该数据。    ReadWriteLock rwl = new ReentrantReadWriteLock();    private Object data = null;//共享数据,只能有一个线程能写数据,但可以有多个线程读该数据     public void get() {        //上读锁,其他线程只能读不能写        rwl.readLock().lock();        try {             System.out.println(Thread.currentThread().getName() + " be ready to read data!");            Thread.sleep((long) (Math.random() * 1000));            System.out.println(Thread.currentThread().getName() + " have read data :" + data);        } catch (InterruptedException e) {            e.printStackTrace();        } finally {            rwl.readLock().unlock();        }    }     public void put(Object data) {        //上写锁,不允许其他线程读也不允许写        rwl.writeLock().lock();         try {            System.out.println(Thread.currentThread().getName() + " be ready to write data!");             Thread.sleep((long) (Math.random() * 1000));             this.data = data;            System.out.println(Thread.currentThread().getName() + " have write data: " + data);        } catch (InterruptedException e) {            e.printStackTrace();        } finally {            rwl.writeLock().unlock();        }    }}

以上就是关于"java读写锁怎么用"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

0