iteye_15601 2012-10-09 16:11
浏览 235
已采纳

关于并发锁的问题

[code="java"]
public class PrivateLock {

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

}

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

  • 写回答

1条回答 默认 最新

  • jinnianshilongnian 2012-10-09 21:33
    关注

    举个例子吧

    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可并发 但每个方法是串行

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏