并发同步synchronized 关键字 VS ReentrantLock 对象

阅读更多
并发同步synchronized 关键字 VS ReentrantLock

相同点

  • 都实现了多线程同步和JVM内存可见性语义
  • 都是可重入锁


不同点

  • 机制不同
  • synchronized通过java对象头锁标记和Monitor对象实现,并通过JVM内存模型保证包含共享变量的多线程内存可见性。Reentrantlock通过CAS、AQS(AbstractQueuedSynchronizer)和 locksupport实现,依赖ASQ的volatile state保证包含共享变量的多线程内存可见性。
  • 用法不同
  • synchronized可以修饰实例方法、静态方法、代码块;
    Reentrantlock显示调用trylock()/lock()方法,需要在finally块中释放锁。
  • 功能程度不同
  • Reentrantlock提供有限时间等候锁(设置过期时间)、可中断锁(lockInterruptibly)、condition(提供await、signal等方法)等语义 ,reentrantlock提供公平锁和非公平锁实现;synchronized不可设置等待时间、不可被中断(interrupted)

  

你可能感兴趣的:(并发同步synchronized 关键字 VS ReentrantLock 对象)