java读写锁的特性是什么
本篇内容主要讲解“java读写锁的特性是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java读写锁的特性是什么”吧!
成都创新互联是一家专注于网站设计、成都网站设计与策划设计,临泉网站建设哪家好?成都创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:临泉等地区。临泉做网站价格咨询:18982081108
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读写锁的特性是什么
分享链接:http://scyingshan.cn/article/gchpod.html