适当使用同步或锁定一段代码
Posted
技术标签:
【中文标题】适当使用同步或锁定一段代码【英文标题】:Appropriate use of synchronizing or locking a segment of code 【发布时间】:2021-09-22 06:07:36 【问题描述】:给定一个具有 2 个方法的单例类 Employee int getSalary() void updateSalary(int increment)
我需要同步或锁定这两个函数还是使用原子工资变量? 如果是,那么问题是,以这种方式,我们必须同步我们在多线程环境中定义的所有函数。那么,为什么不直接将同步作为标准,因为今天没有现实世界的应用程序是单线程的?
【问题讨论】:
【参考方案1】:对于单例,我们总是要非常小心,因为单例对象自然是一个实例,可以在线程之间共享。使函数同步是一种方法,但它不是有效的方法。我们需要考虑并发的其他方面,比如不可变的原子类。
class Employee
//singleton instantiation
private final AtomicInteger sal = new AtomicInteger(0);
int getSalary()
return sla.get();
void updateSalary(int increment)
sla.add(increment);
这样就解决了,我们不需要同步单例类的每个方法。
我们不必将每个类的每个函数都标记为要同步,但如果函数正在修改状态或读取状态并且可能被并发调用,则必须始终小心,在这种情况下开始考虑同步。但是,对于单例类,我们总是要小心。
【讨论】:
以上是关于适当使用同步或锁定一段代码的主要内容,如果未能解决你的问题,请参考以下文章