synchronized(this) 和 synchronized(Thread.currentThread()) 的区别
Difference between synchronized(this) and synchronized(Thread.currentThread())
这不是作业,这些是一些概念性的问题。
synchronized(this)
和synchronized(Thread.currentThread())
有什么区别?
获得 Thread
实例的锁有什么用处或优势吗?
(调用 wait()
、notify()
或 notifyAll()
等方法除外)?
还有,有什么情况可以用synchronized(Thread.currentThread())
吗? (调用 wait()
、notify()
或 notifyAll()
等方法除外)?
您选择同步的对象仅与段代码想要获取锁以保护特定操作有关。因此,主要的功能考虑是确保那些代码片段可以引用该对象。
在功能上,无论是在 Thread.currentThread()
还是 new Object()
上同步都没有关系,只要使用该锁的代码片段可以访问该对象(记住 Thread.currentThread()
将 return 一个不同的对象当 运行 在不同的线程上,这使得使用锁定非常尴尬。
但是,您应该谨慎选择要同步的对象,以减少出现错误的可能性。最好的情况是 只有 需要为特定操作锁定对象的代码可以访问锁定对象(因此没有其他代码会为可能干扰的其他锁定场景共享它。 )
这不是作业,这些是一些概念性的问题。
synchronized(this)
和synchronized(Thread.currentThread())
有什么区别?获得
Thread
实例的锁有什么用处或优势吗? (调用wait()
、notify()
或notifyAll()
等方法除外)?还有,有什么情况可以用
synchronized(Thread.currentThread())
吗? (调用wait()
、notify()
或notifyAll()
等方法除外)?
您选择同步的对象仅与段代码想要获取锁以保护特定操作有关。因此,主要的功能考虑是确保那些代码片段可以引用该对象。
在功能上,无论是在 Thread.currentThread()
还是 new Object()
上同步都没有关系,只要使用该锁的代码片段可以访问该对象(记住 Thread.currentThread()
将 return 一个不同的对象当 运行 在不同的线程上,这使得使用锁定非常尴尬。
但是,您应该谨慎选择要同步的对象,以减少出现错误的可能性。最好的情况是 只有 需要为特定操作锁定对象的代码可以访问锁定对象(因此没有其他代码会为可能干扰的其他锁定场景共享它。 )