关于lock和synchronized的选择
这里不介绍具体用法,介绍lock和synchronized的不同从而做出选择
1.lock是一个接口,而synchronized是java中的一个关键字,synchronized是内置的语言实现。
2.synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而lock在发生异常时,如果没有主动
通过unlock()释放锁,则很可能造成死锁现象。因此使用lock时最好用到try,catch并且在finally块中释放锁。
3.lock可以让等待锁的线程相应中断(使用lock的实现类:ReentrantLock的lockInterruptibly()方法,用
线程对象名+interrupt()中断线程的等待
),而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够相应中断。
4.通过lock可以知道有没有成功获取锁(用ReentrantLock的trylock()方法返回布尔值),而synchronized无法办到。
5.lock可以提高多个线程进行读操作的效率,因为lock具有ReentrantReadWriteLock实现类的readLock()返回读锁,
ReentrantReadWriteLock实现类的writeLock()返回写锁。
综合分析:
在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),