我正在阅读一本关于 Java 的书,并且有一个练习题,他们声明了一个具有一个私有变量的类,一个void
执行一些昂贵操作来计算然后设置私有变量的公共方法,以及第二个返回私有变量的公共方法多变的。问题是“如何使这个线程安全”,一个可能的答案是“同步这两种方法中的每一个”,另一个可能的答案是“这个类不能成为线程安全的”。
我认为无法使该类成为线程安全的,因为即使您同步这两种方法,您也可能会遇到 Thread1 会调用 setter 并且在 Thread1 可以调用 getter 之前,Thread2 可能会执行并调用 setter,因此当 Thread1去检索结果它会得到错误的信息。这是看待事物的正确方式吗?这本书建议正确的答案是通过同步这两种方法可以使类成为线程安全的,现在我很困惑......