簡體   English   中英

靜態嵌套類線程安全 - java

[英]Static nested class thread safety - java

我在名為“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);
        }

    }
}

如果我嘗試從兩個線程同時使用構建器創建兩個MyClass實例,它會安全嗎?

如果你的意思是在兩個線程中使用相同Builder實例,那么不,但如果每個線程都有自己的Builder實例,那么你會沒事的。 有了這種模式:

MyClass c = new MyClass.Builder().height(10).weight(2).build();

每個Builder實例都是單個線程的本地實例。

我看到你得到了答案。 只是添加它,當然構建器不是線程安全的。 在代碼的當前形狀中,更改為以下內容可能會如此

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM