关于synchronized以及ReetrantLock、ReentrantReadWriteLock的选择

来源:互联网 发布:淘宝网卖什么比较畅销 编辑:程序博客网 时间:2024/05/19 23:54

synchronized和ReetrantLock的区别

  synchronized是java的内置锁,相对于ReetrantLock使用更加方便,如果实现自己的Lock,可以继承ReetrantLock来实现,在性能上,两个差异不是特别大。ReetrantLock仅仅高一点。
  ReetrantReadWriteLock和上面两个相比,性能优越主要体现在读方面,因为多个线程同时读的时候是共享锁,所以多个线程可以同时进行读操作。如果读操作是简单的读取一个变量的值,那么性能和synchronized以及ReetrantLock相比几乎一样,但是如果读操作是一个相对比较费时的操作,那么优势就会非常明显。

结论

  • 当读写频率几乎相等,而且不需要特殊需求的时候,优先考虑synchronized
  • 当需要定制我们自己的lock的时候,或者需要更多的功能(类似定时锁、可中断锁等待),我们使用ReetrantLock
  • 当很少的写操作,更多的读操作,并且读操作是一个相对耗时的操作,那么就是用ReetrantReadWriteLock
0 0