synchronized 、ReentrantLock

synchronizedReentrantLock 都是用于实现多线程同步的机制:

  1. 锁的获取方式:

    • synchronized 是内置的 Java 关键字,它通过对象的内置监视器来获取锁。每个对象都有一个关联的监视器,只有一个线程可以获得对象的监视器,其他线程必须等待。
    • ReentrantLock 是一个类,它提供了显式的锁,通过创建 ReentrantLock 实例并调用其 lock() 方法来获取锁。
  2. 可中断性:

    • ReentrantLock 支持可中断的锁获取,即线程可以在等待锁的过程中响应中断。
    • synchronized 不支持可中断性,一旦线程等待锁,只能等待锁被释放或线程被中断。
  3. 公平性:

    • ReentrantLock 可以选择是否使用公平锁。公平锁会按照请求锁的顺序分配锁,确保所有线程都有机会获得锁。非公平锁则不考虑等待线程的顺序。
    • synchronized 是非公平锁,不考虑等待线程的顺序。
  4. 灵活性:

    • ReentrantLock 提供了更多的灵活性,如超时获取锁、尝试获取锁、条件等待等功能。这使得它在某些复杂的同步需求下更有优势。
    • synchronized 提供的功能相对较少。

你可能感兴趣的:(java)