synchronized(this) 和 synchronized(Thread.currentThread()) 的区别

Difference between synchronized(this) and synchronized(Thread.currentThread())

这不是作业,这些是一些概念性的问题。

  1. synchronized(this)synchronized(Thread.currentThread())有什么区别?

  2. 获得 Thread 实例的锁有什么用处或优势吗? (调用 wait()notify()notifyAll() 等方法除外)?

  3. 还有,有什么情况可以用synchronized(Thread.currentThread())吗? (调用 wait()notify()notifyAll() 等方法除外)?

您选择同步的对象仅与段代码想要获取锁以保护特定操作有关。因此,主要的功能考虑是确保那些代码片段可以引用该对象。

在功能上,无论是在 Thread.currentThread() 还是 new Object() 上同步都没有关系,只要使用该锁的代码片段可以访问该对象(记住 Thread.currentThread() 将 return 一个不同的对象当 运行 在不同的线程上,这使得使用锁定非常尴尬。

但是,您应该谨慎选择要同步的对象,以减少出现错误的可能性。最好的情况是 只有 需要为特定操作锁定对象的代码可以访问锁定对象(因此没有其他代码会为可能干扰的其他锁定场景共享它。 )