这不是家庭作业,这些是一些概念性的查询。
synchronized(this)
和synchronized(Thread.currentThread())
有什么区别?
获取Thread
实例上的锁是否有任何用处或优势?
(调用wait()
,notify()
或notifyAll()
等方法除外?
此外,是否有任何情况可以使用synchronized(Thread.currentThread())
? (调用wait()
,notify()
或notifyAll()
等方法除外?
答案 0 :(得分:1)
您选择同步的对象仅与代码片段想要锁定以保护特定操作有关。因此,主要的功能考虑因素是确保这些代码段可以引用该对象。
从功能上讲,只要使用该锁定的代码片段可以访问该对象,是否在Thread.currentThread()
或new Object()
上进行同步并不重要(请记住Thread.currentThread()
在不同的线程上运行时会返回一个不同的对象,这使得用于锁定非常尴尬)。
但是,您应该小心选择要以减少错误可能性的方式进行同步的对象。最好的情况是仅需要锁定特定操作的对象的代码可以访问锁定对象(因此,对于可能会干扰的其他锁定方案,没有其他代码会共享它。)