适当使用同步或锁定一段代码

Appropriate use of synchronizing or locking a segment of code

给定一个单例 class Employee 有 2 个方法 int getSalary() void updateSalary(int increment)

我需要同步或锁定这两个函数还是使用原子工资变量? 如果是,那么问题是通过这种方式我们必须同步我们在多线程环境中定义的所有函数。那么,为什么不直接将同步作为标准,因为当今世界的应用程序都不会是单线程的?

对于单例,我们总是要非常小心,因为单例对象自然是一个实例,可以在线程之间共享。使函数同步是一种方法,但不是有效的方法。我们需要考虑并发的其他方面,比如原子不变性 classes.

class Employee {

     //singleton instantiation 
     private final AtomicInteger sal  = new AtomicInteger(0);
     
     int getSalary(){
         return sla.get();
     }
     void updateSalary(int increment){
        sla.add(increment);
     }
}

这就解决了,我们不需要同步单例的每个方法class。

我们不必将每个 class 的每个函数都标记为同步,但在这种情况下,如果一个函数正在修改状态或读取状态并且可以同时调用,则必须始终小心开始考虑同步。但是,对于单例 classes 我们总是要小心。