【552、synchronized 和 ReentrantLock 的区别,如何选择】

32 阅读1分钟

synchronizedReentrantLock 都可以用于实现线程同步,二者之间有以下区别:

  1. 可重入性:ReentrantLock 是可重入的锁,即同一个线程可以多次获得同一个锁,而 synchronized 是非可重入的锁。如果一个线程已经获得了一个 synchronized 锁,那么它必须先释放这个锁才能再次获得它。
  2. 可中断性:ReentrantLock 提供了可中断的获取锁的机制,可以让等待的线程在等待期间可以被中断并返回,而 synchronized 是不可中断的。
  3. 公平性:ReentrantLock 可以设置公平锁或非公平锁,而 synchronized 是非公平锁。
  4. 粒度:synchronized 锁的粒度是整个方法或者代码块,而 ReentrantLock 锁的粒度可以细化到单个数据结构或变量的级别。
  5. 性能:在低并发的情况下,synchronized 的性能表现更好,而在高并发的情况下,ReentrantLock 的性能表现更好。

综上所述,当需要实现线程同步时,可以优先选择使用 synchronized 关键字,因为它简单易用,并且性能表现在低并发情况下更好。而当需要更加灵活的同步控制时,可以选择使用 ReentrantLock,它提供了更多的特性,如可重入性、可中断性和公平性,能够更好地适应不同的场景需求。