作家
登录

Java多线程之内置锁与显示锁

作者: 来源: 2017-05-08 15:01:10 阅读 我要评论

{ while (count == 0) notEmpty.await(); return dequeue(); } finally { lock.unlock(); }}private void enqueue(E x) { // assert lock.getHoldCount() == 1; // assert items[putIndex] == null; final Object[] items = this.items; items[putIndex] = x; if (++putIndex == items.length) putIndex = 0; count++; notEmpty.signal();}private E dequeue() { // assert lock.getHoldCount() == 1; // assert items[takeIndex] != null; final Object[] items = this.items; @SuppressWarnings("unchecked") E x = (E) items[takeIndex]; items[takeIndex] = null; if (++takeIndex == items.length) takeIndex = 0; count--; if (itrs != null) itrs.elementDequeued(); notFull.signal(); return x;}

编码

Lock lock = new ReentrantLock();lock.lock();try{}finally{    lock.unlock();}

比拟于Synchronized要复杂一些,并且必定要记得在finally中释放锁而不是其他处所,如许才能包管即使出了异常也能释放锁。

灵活性

  • lock.lockInterruptibly() 可以使得线程在等待锁是支撑响应中断;lock.tryLock() 可以使得线程在等待一段时光过后如不雅还未获得锁就停止等待而非一向等待。有了这两种机制就可以更好的制订获得锁的重试机制,而非盲目一向等待,可以更好的避免饥饿和逝世锁问题
  • ReentrantLock可以成为公平素(非默认的),所谓公平素就是锁的等待队列的FIFO,不过公平素会带来机能消费,如不雅不是必须的不建议应用。这和CPU对指令进行重排序的来由是类似的,如不雅强行的按照代码的书写次序来履行指令,就会浪费很多时钟周期,达不到最大年夜应用率

机能

固然Synchronized和标准的ReentrantLock机能差别不大年夜,然则ReentrantLock还供给了一种非互斥的读写锁,
因为“读/读”并不影响数据的完全性,所以可以多个读线程同时持有锁,如许在读写比较高的情况下,机能会有很大年夜的晋升。


也就是不强迫每次最多只有一个线程能持有锁,它会避免“读/写”冲突,“写/写”冲突,然则不会清除“读/读”冲突,
class RWLockList {//读写锁    private List list;    private final ReadWriteLock lock = new ReentrantReadWriteLock();    private final Lock readLock = lock.readLock();    private final Lock writeLock = lock.writeLock();    public RWLockList(List list){this.list = list;}    public int get(int k) {        readLock.lock();        try {            return (int)list.get(k);        } finally {            readLock.unlock();        }    }    public void put(	
				
			

  推荐阅读

  关于Web Workers你需要了解的七件事

介绍Web Workers许可你在后台运行JavaScript代码,而不会阻拦web用户界面。Web Workers可以进步网页的┞符体机能,还可以加强用户体验。Web Workers有两种风格 ——专用Web Wo>>>详细阅读


本文标题:Java多线程之内置锁与显示锁

地址:http://www.17bianji.com/lsqh/35064.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)