大体分为两种:
1. synchronized。数据结构中经常介绍的。该关键字放在非静态方法上,锁的是对象。放在静态方法上,锁的是代码段。(因为静态方法可以直接类名.方法名,所以锁的是类对象。)
2.Lock。两个子类:ReentrantLock和ReentrantReadWriteLock.
1)ReentrantLock 特性:比synchronized更灵活;支持公平锁;使用时的最标准方法是在try之前调用lock方法,在finally代码块释放锁(无论何时都会执行)。
构造方法中,默认创建非公平锁。
公平性与否是针对获取锁而言的,如果一个锁是公平的,那么锁的获取顺序就应该符合请求的绝对时间顺序,也就是FIFO。公平性锁每次都是从同步队列中的第一个节点获取到锁,而非公平性锁出现了一个线程连续获取锁的情况。