目录
1.synchronized同步锁
2.ReentrantLock重入锁
3.ReadWriteLock读写锁
4.StampedLock戳锁(目前没找到合适的名字,先这么叫吧...)
5.总结
=======正文分割线==========
为了更好的支持并发程序,JDK内部提供了多种锁。本文总结4种锁。
1.synchronized同步锁
使用:
synchronized本质上就2种锁:
1.锁同步代码块
2.锁方法
可用object.wait() object.notify()来操作线程等待唤醒
原理:synchronized细节的描述传送门:jdk源码剖析三:锁Synchronized
性能和建议:JDK6之后,在并发量不是特别大的情况下,性能中等且稳定。建议新手使用。
2.ReentrantLock可重入锁(Lock接口)
使用:ReentrantLock是Lock接口的实现类。Lock接口的核心方法是lock(),unlock(),tryLock()。可用Condition来操作线程:
如上图,await()和object.wait()类似,singal()和object.notify()类似,singalAll()和object.notifyAll()类似
原理:核心类AbstractQueuedSynchronizer,通过构造一个基于阻塞的CLH队列容纳所有的阻塞线程,而对该队列的操作均通过Lock-Free(CAS)操作,但对已经获得锁的线程而言,ReentrantLock实现了偏向锁的功能。
性能和建议:性能中等,建议需要手动操作线程时使用。