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

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

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办