当前位置:  开发笔记 > 编程语言 > 正文

在同一个对象上同步两次?

如何解决《在同一个对象上同步两次?》经验,为你挑选了1个好方法。

我想知道如果在同一个对象上同步两次,在Java中我会得到任何奇怪的行为吗?

方案如下

pulbic class SillyClassName {

    object moo;
    ...
    public void method1(){
        synchronized(moo)
        {
            ....
            method2();
            ....
        }
    }

    public void method2(){
        synchronized(moo)
        {
            doStuff();
        }
    }
}

两种方法都使用该对象并在其上进行同步.第一种方法调用的第二种方法会因为它被锁定而停止吗?

我不这么认为,因为它是相同的线程,但我不确定可能发生的任何其他奇怪的结果.



1> Leigh..:
重入

同步块使用可重入锁,这意味着如果线程已经拥有锁,它可以毫无问题地重新获取它.因此,您的代码将按预期工作.

请参阅Java Tutorial页面底部的内部锁定和同步.

报价截至2015-01 ...

可重入同步

回想一下,线程无法获取另一个线程拥有的锁.但是一个线程可以获得它已经拥有的锁.允许线程多次获取相同的锁可启用重入同步.这描述了一种情况,其中同步代码直接或间接地调用也包含同步代码的方法,并且两组代码使用相同的锁.在没有可重入同步的情况下,同步代码必须采取许多额外的预防措施,以避免线程导致自身阻塞.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有