iteye_15601
iteye_15601
2012-10-09 16:11

关于并发锁的问题

已采纳

[code="java"]
public class PrivateLock {

private final Object myLock = new Object();   
void someMethod()   
{   
    synchronized(myLock)   
    {   
        //访问或者修改person的状态   
    }   
}   

}

[/code]
请问这里说的私有锁保护的好处到底是什么?学习java并发并发编程实践的时候,看到这一段,有点不明白,
原文如下:
[color=blue]使用私有的锁对象,而不是对象的内部锁(或者任何其他的可公共访问的锁,有很多好处。私有的锁对象可以封装,这样客户代码无法得到它,然而可公共访问的锁允许客户代码涉足他的同步策略--正确的或者不正确的。客户不正确的得到另一个对象的锁,会引起活跃度方面的问题,另外要验证程序的正确的使用着一个可公共访问的锁,需要检查完整的程序,而不是一个单独的类。[/color]
对这一段解释,看的很模糊,那个大哥能详细阐述一下,为什么要这样,好处是什么。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • jinnianshilongnian jinnianshilongnian 9年前

    举个例子吧

    1、如
    public class PrivateLock {

    private final Object myLock = new Object();   
    void someMethod()   
    {   
        synchronized(this)   
        {   
            //访问或者修改person的状态   
        }   
    }   
    

    void someMethod2()

    {

    synchronized(this)

    {

    //访问或者修改person的状态

    }

    }

    }

    如果锁是this 则 someMethod 和 someMethod2 内部需要使用this同步 此时两个方法执行时只能串行

    2、如果有人说 我只想每个方法的调用串行即可 可以这样
    public class PrivateLock {

    private final Object myLock1 = new Object();   
    private final Object myLock2 = new Object();   
    void someMethod()   
    {   
        synchronized(myLock1)   
        {   
            //访问或者修改person的状态   
        }   
    }   
    

    void someMethod2()

    {

    synchronized(myLock2)

    {

    //访问或者修改person的状态

    }

    }

    }

    现在是两把锁 someMethod和someMethod2可并发 但每个方法是串行

    点赞 评论 复制链接分享

相关推荐