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读写锁的特性,希望对大家有所帮助。更多Java学习指路:Java基础

以上是 java读写锁的特性 的全部内容, 来源链接: utcz.com/z/546397.html

回到顶部