JAVA中有多少种类型的锁

时间:2016-12-22 13:20:56

标签: java multithreading locking

我在接受采访时被问到java中有多少种类型的锁,我知道Synchronized(this)或synchronized方法,以及Reentrant Lock。我可以在对象上获得任何其他类型的锁吗?

3 个答案:

答案 0 :(得分:5)

我不知道你正在面试的工作,但如果在面试中问你这个问题,那么我就不会寻找正确的答案。我会尝试开始讨论,告诉我锁定意味着什么,它是如何工作的,你如何使用它,你或你的同伴犯了什么样的错误,以及你从你/他们的错误中学到了什么。

我想知道你是否理解语言提供的锁定与库提供的锁定之间的区别,以及底层硬件提供的锁定。

如果您不确切地知道Java语言中有多少种不同类型的锁,那么地球上没有任何工作被取消资格,但如果您有很多工作要做,那么您不应该这样做不知道如何谈论

答案 1 :(得分:2)

正如其他人已经提到的,有几种方法可以同步代码。

据我所知,Java中基本上有三种不同的同步功能:

  • Monitor-Objects(与synchronize关键字一起使用)
  • Locks(例如ReentrantLock)
  • Semaphores(非常类似于Locks,但它们提供了一系列许可证,可以声称可以进入关键部分;具有单个可用令牌的信号量工作等同于锁定)

答案 2 :(得分:0)

Lock的javadoc开始,这些是已实现的类:

  • ReentrantLock
  • ReentrantReadWriteLock.ReadLock
  • ReentrantReadWriteLock.WriteLock

ReentrantLock

  

可重入互斥锁具有与使用同步方法和语句访问的隐式监视器锁相同的基本行为和语义,但具有扩展功能。

ReentrantReadWriteLock(您可以获取对ReentrantReadWriteLock.ReadLockReentrantReadWriteLock.WriteLock的引用):

  

ReadWriteLock的实现,支持与ReentrantLock类似的语义。