Javaクラスのスレッドセーフにする方法?

マニッシュ:

私は以下のようにJavaのクラスを持っています

 class User {

    String name;
    String phone;

    public String getName() {
        return name;
    }

    public String getPhone() {
        return phone;
    }

}

このUserクラスのすべてのスレッド1オブジェクトが作成されるため、このクラスを使用する方法が、あります。オブジェクトのコピーは、各スレッドのためにそこにあるので、今、私は、スレッドセーフとして、このクラスを呼び出すことができますか?

私はこれらのメソッドを同期する必要がありますか?

アンドロニカス:

方法は、各スレッドがその一つのコピーを持っている場合アクセスするスレッドの最大値は1であるとして、それは、スレッドセーフと呼ばれることができ、それを提示しました。

もう一つ-あなたはあなたとしてフィールドを宣言した場合private、そのクラスのインスタンスを作成するとfinal、それは(不変です、final User user = new User(...))。オブジェクトを変更できないだけでなく、それはその参照を変更することはできませんので、何のセッターは、ありません。あなたは不変性を維持したい場合は、セッターが変更されたフィールドで、このオブジェクトの新しいインスタンスを返すにする必要があります。

@markspace気づいた、より良いアプローチは、あなたが以前のものを使用している場合ので、最後のようにフィールドを宣言し、作ることであろうUser、それは動作しません、いくつかのクラスのメンバーを(最終的にしない限り)。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=219642&siteId=1