Synchronized锁的缺陷
Synchronized不会手动释放锁资源,当线程发生阻塞后,其他线程只能眼睁睁的等着,不会分别是读线程和写线程,读问题并不会引发高并发,但是synchronized锁不能识别是读线程还是锁线程 ,遇到了都会锁上。另外没有中断锁的功能,一个线路等待时间过长不会自我中断线程。
Lock锁
一、概述
1.Lock是JDK1.5中提供的一套用于取代synchronized的机制
2.相对synchronized而言,Lock更加灵活和精细 - synchronized在使用的时候需要确定锁对象,如果确定错误或者锁形成嵌套,容易出现死锁;Lock由程序员自己创建,在使用的时候无需找锁对象而是直接调用方法加锁解锁即可
1.ReentrantLock - 重入锁:允许锁资源被同一个线程多次占用,也允许这个锁资源被不同的线程占用
2.锁的公平和非公平策略:
1.在资源有限的情况下,线程之间实际抢占执行到的次数不一定均等,这种现象称之为非公平策略
2.公平策略在使用的时候需要定义队列,而线程并不是直接抢占资源而是抢占入队顺序,这种情况下每一个线程的执行次数是大致相等
3.相对非公平策略而言,公平策略需要耗费更多的内存,需要涉及到线程调度,所以公平策略的效率相对较低
4.Lock和synchronized默认是非公平策略
·公平锁: ReentrantLock pairLock =new eentrantLock(true)
--相当于,线程需要进入队列中等待,调用使用完后又进入队咧最后,重新等待。先进先出。
·非公平锁: Reentrant