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

时间:2015-06-02 09:30:54

标签: java multithreading synchronization synchronized

这不是家庭作业,这些是一些概念性的查询。

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

  2. 获取Thread实例上的锁是否有任何用处或优势? (调用wait()notify()notifyAll()等方法除外?

  3. 此外,是否有任何情况可以使用synchronized(Thread.currentThread())? (调用wait()notify()notifyAll()等方法除外?

1 个答案:

答案 0 :(得分:1)

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

从功能上讲,只要使用该锁定的代码片段可以访问该对象,是否在Thread.currentThread()new Object()上进行同步并不重要(请记住Thread.currentThread()在不同的线程上运行时会返回一个不同的对象,这使得用于锁定非常尴尬)。

但是,您应该小心选择要以减少错误可能性的方式进行同步的对象。最好的情况是需要锁定特定操作的对象的代码可以访问锁定对象(因此,对于可能会干扰的其他锁定方案,没有其他代码会共享它。)