是否有可能编写一个类,以便其他程序员无法获取类的实例上的锁?
锁定滥用,如果有这样的术语,可能是一个严重的杀手.遗憾的是,程序员在提供线程安全代码和有限的并发知识的灾难性力量之间徘徊,即使在他们调用实际上不需要阻止实例资源的操作时,也会采用锁定实例的方法造成严重破坏.
唯一的方法是确保类实例不可见.例如,您可以声明为私有嵌套类,并确保封闭类不泄漏引用实例.
基本上,如果某些东西可以获得对实例的引用,则没有什么可以阻止它锁定它.
通常,确保对锁定对象的引用不会泄漏就足够了......而不用担心类可见性.
关注 - 响应OP的评论.
你不能阻止别人的代码锁定你的一个类的实例.但是你可以设计你的类,这样就不会干扰你的类内部同步.只需安排您的类使用私有对象(甚至是Object
实例)进行同步.
从更一般的意义上讲,您无法阻止应用程序员以您不喜欢的方式使用您的类.我听说过的其他例子(这里)包括尝试强制人员覆盖方法或提供特定的构造函数.甚至将你的类字段声明为私有也不会阻止一个坚定的(或绝望的)程序员使用反射来获取它们.
但另一方面,那些你试图阻止的东西实际上可能并非愚蠢.例如,实际上可能有一个合理的原因让应用程序将您的类用作锁定对象,尽管您反对它会降低并发性.(一般情况下,它只是在特定情况下可能不相关.)
我的一般感觉是,记录您的类的设计方式是一个好主意,并设计API来鼓励这一点.但试图强迫这个问题是不明智的.最终,代码反对你的课程的人有责任明智地使用它们......而不是你的.
归档时间: |
|
查看次数: |
192 次 |
最近记录: |