线程安全方式访问类变量

时间:2018-07-30 16:22:25

标签: java multithreading thread-safety

我在其他地方找不到对我的问题的任何明确答案,因此我决定问。

我正在将代码移植到Java中并使其具有线程安全性。我在对象上应用尽可能多的获取/设置方法并将其传递给对象。显然,这些值未设置为静态。但是我也在寻找其他角度。

对于任何特定的线程,我希望一个类中的所有方法都能够访问一个类变量而不会受到其他线程的干扰(以及WITHOUT同步变量关键字),以下可接受吗?

public class TestClass {


    public double testVal;


    public void methodA() {
        testVal = 22.6;
    }



    public double methodB() {
        return testVal;
    }
}

如果我在TestClass中创建main的实例并调用methodA,然后在该对象上调用methodB,它将返回我的testVal。这个问题将随着在类中不同方法之间共享的许多许多值而扩大,因为我只是在演示一个简单的演示。

这是一个好的线程安全方法吗?如果我是正确的话,这些数据将存储在线程堆栈而不是堆中?

欢呼

1 个答案:

答案 0 :(得分:0)

There are many ways to make your class thread safe.

1. You can make your variable as volatile as in the example you have asked , if the current state of testval does not depend upon the previous state
2. You make the variable as private and volatile and use synchronization for all the methods that are modifying the state of your object.
3. Make the class as immutable
4. Make the calss as stateless
5. Guard all the method with synchronized keyword that are modifying the state of the variables.