Synchronized和Lock的区别?
1.synchronized是java的关键字,lock是一个类
2.synchronized在异常时会自动释放锁,而lock是不会自动释放锁,需要在finally中手动释放锁。
3.synchronized是不能响应中断的,就是说,如果线程被阻塞,后面的线程也会一直等待。lock是可以响应中断,不用一直等待。
4.synchronized是无法判断锁的状态,也不知道有没有获取锁,lock是可以判断锁的状态,并可以通过trylock来得知是否获取到锁了。
5.synchronized是非公平锁,即后面等待的线程是没有顺序的,谁能抢到谁执行。lock是可以实现公平锁,只需要在创建锁时new ReentrantLock(true),便可以达到不插队的情况,区别是内部多了一个hasQueuedPredecessors()方法,它会在AQS中没有线程的情况下才去申请锁,非公平锁不管AQS中有没有线程都会申请锁。
6.性能方面Lock在竞争激烈情况下性能要好
7.synchronized是cpu悲观锁,即线程拥有的是独占锁。lock属于乐观锁,每次不加锁,假设没有冲突的发生,如果发生了冲突就会不断的重试。