千家信息网

java读写锁的特性是什么

发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,本篇内容主要讲解"java读写锁的特性是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"java读写锁的特性是什么"吧!1、公平选择性,支持非公平和公平
千家信息网最后更新 2025年01月17日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