synchronized和ReetrantLock的区别
synchronized是java的内置锁,相对于ReetrantLock使用更加方便,如果实现自己的Lock,可以继承ReetrantLock来实现,在性能上,两个差异不是特别大。ReetrantLock仅仅高一点。
ReetrantReadWriteLock和上面两个相比,性能优越主要体现在读方面,因为多个线程同时读的时候是共享锁,所以多个线程可以同时进行读操作。如果读操作是简单的读取一个变量的值,那么性能和synchronized以及ReetrantLock相比几乎一样,但是如果读操作是一个相对比较费时的操作,那么优势就会非常明显。
结论
- 当读写频率几乎相等,而且不需要特殊需求的时候,优先考虑synchronized
- 当需要定制我们自己的lock的时候,或者需要更多的功能(类似定时锁、可中断锁等待),我们使用ReetrantLock
- 当很少的写操作,更多的读操作,并且读操作是一个相对耗时的操作,那么就是用ReetrantReadWriteLock