编码
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许可你在后台运行JavaScript代码,而不会阻拦web用户界面。Web Workers可以进步网页的┞符体机能,还可以加强用户体验。Web Workers有两种风格 ——专用Web Wo>>>详细阅读
本文标题:Java多线程之内置锁与显示锁
地址:http://www.17bianji.com/lsqh/35064.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示