Java的.如何正确地同步getter和setter?
发布时间:2020-12-14 16:24:40 所属栏目:Java 来源:网络整理
导读:如果一个对象中有几个可变属性将由多个线程执行,我明白它们应该被同步. class Doggie { private String name; private int age; public void setName(String name) { this.name = name; } public String getName() { return this.name; } public void setAge
如果一个对象中有几个可变属性将由多个线程执行,我明白它们应该被同步.
class Doggie { private String name; private int age; public void setName(String name) { this.name = name; } public String getName() { return this.name; } public void setAge(int age) { this.age = age; } public int getAge() { return this.age; } } 问题: > Java中没有返回和赋值原子操作? 解决方法
是的,他们是原子的(在某些情况下至少),但原子性不是唯一的问题.另一个重要的问题是,一个线程对一个属性的写入操作是否被保证对于不同线程所做的相同属性的后续读取是可见的. >当读取和写入在同一个线程中时,读取将保证看到较早的写入. 请注意,原始锁/互斥体不是唯一的同步方式.
如果(且只有)锁争用可能,则使用多个锁是有道理的.在您的示例中,如果某些Doggie实例收到非常高的获取和/或设置操作的速率,则锁争用仅可能是一个问题.
这取决于.如果您的应用程序正在使用Doggie对象的原始锁定,那么您可能会遇到锁定争用或甚至意外锁定get和set操作.在这种情况下,私人锁可能是可取的.否则,私有锁是不必要的开销. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |