您现在的位置是:课程教程文章
java读写锁的特性
2023-12-13 22:53课程教程文章 人已围观
1、公平选择性,支持非公平和公平锁获取,吞吐量不公平优于公平。
2、重进入,读锁和写锁都支持线程重进入。
3、锁降级,遵循获取写锁、获取读锁、释放写锁的顺序,写锁可以降级为读锁。
实例
publicclassReadWriteLockTest{ publicstaticvoidmain(String[]args){ finalQueueq=newQueue(); for(inti=0;i<3;i++){ newThread(){ @Override publicvoidrun(){ while(true){ q.get(); } } }.start(); newThread(){ @Override publicvoidrun(){ while(true){ q.put(newRandom().nextInt(10000)); } } }.start(); } } } classQueue{ //共享数据,只能有一个线程能写该数据,但可以有多个线程同时读该数据。 ReadWriteLockrwl=newReentrantReadWriteLock(); privateObjectdata=null;//共享数据,只能有一个线程能写数据,但可以有多个线程读该数据 publicvoidget(){ //上读锁,其他线程只能读不能写 rwl.readLock().lock(); try{ System.out.println(Thread.currentThread().getName()+"bereadytoreaddata!"); Thread.sleep((long)(Math.random()*1000)); System.out.println(Thread.currentThread().getName()+"havereaddata:"+data); }catch(InterruptedExceptione){ e.printStackTrace(); }finally{ rwl.readLock().unlock(); } } publicvoidput(Objectdata){ //上写锁,不允许其他线程读也不允许写 rwl.writeLock().lock(); try{ System.out.println(Thread.currentThread().getName()+"bereadytowritedata!"); Thread.sleep((long)(Math.random()*1000)); this.data=data; System.out.println(Thread.currentThread().getName()+"havewritedata:"+data); }catch(InterruptedExceptione){ e.printStackTrace(); }finally{ rwl.writeLock().unlock(); } } }
以上就是java读写锁的特性,希望对大家有所帮助。更多Java学习指路:Java基础
课程教程:java读写锁的特性上一篇:java读写锁是什么
下一篇:没有了