静态嵌套类线程安全 - java

sha*_*fax 2 java multithreading builder

我在名为"MyClass"的类中有一个静态的"Builder"类.如果我尝试从两个线程同时使用构建器创建两个MyClass实例,它会安全吗?可以将一个线程设置的值分配给另一个线程创建的对象吗?

码:

public class MyClass {
    private int height;
    private int weight;

    private MyClass(Builder builder) {
        height = builder.height;
        weight = builder.weight;
    }

    public static class Builder {
        private int height;
        private int weight;

        public Builder height(int h) {
            height = h;
            return this;
        }

        public Builder weight(int w) {
            weight = w;
            return this;
        }

        public MyClass build() {
            return new MyClass(this);
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

Ian*_*rts 8

如果我尝试从两个线程同时使用构建器创建两个MyClass实例,它会安全吗?

如果你的意思是在两个线程中使用相同的实例,Builder那么不,但如果每个线程都有自己的实例,Builder那么你就没事了.有了这种模式:

MyClass c = new MyClass.Builder().height(10).weight(2).build();
Run Code Online (Sandbox Code Playgroud)

每个Builder实例都是单个线程的本地实例.