私はスレッドの安全性についてかなり読んでおり、オブジェクトの複数のインスタンスがスレッドの安全性に影響を与えるかどうかについて混乱しています。具体例を次に示します:
RGBColorというクラスがあり、赤、緑、青の値を設定してから色を返すとします。スレッドセーフティとJavaでのインスタンス
Public Class RGBColor {
private int red;
private int green;
private int blue;
Public RGBColor(int red, int green, int blue){
this.red = red;
this.green = green;
this.blue = blue;
}
Public void setColor(int red, int green, int blue){
this.red = red;
this.green = green;
this.blue = blue;
}
Public RGBColor getColor(){
return this;
}
}
は今のプログラムは、例えば、そのクラスの複数のインスタンスを作成している場合:
RGBColor red = new RGBcolor(255,0,0);
RGBColor blue = new RGBcolor(0,0,255);
を今ここで質問です。これらのクラスのインスタンスは完全に独立していますか?スレッドの安全性が問題になるでしょうか?結局のところ私が理解しているように、RAMで異なる割り当てを持つ全く異なるオブジェクトでなければなりません。
もう1つの質問は、変数とメソッドが静的な場合です。
Public Class RGBColor {
private static int RED;
private static int GREEN;
private static int BLUE;
Public static void setColor(int red, int green, int blue){
RED = red;
GREEN = green;
BLUE = blue;
}
}
スレッドの安全性に関しては、静的変数とメソッドはどのように処理されますか?
ps:2番目の例に欠陥があると更新されました。
最初の質問への回答は「はい」です。オブジェクトのメソッドは「独立」です。オブジェクト上のメソッドを呼び出すと、そのオブジェクトにのみ影響します。質問2の答えは、通話を同期させる必要があるということです。あなたの例では、すべてのスレッドが同じ値を変更するので、おそらくそれは重要ではありません。 btw、静的メソッドでは 'this'を呼び出すことはできません。 –
@JackFlamp大変ありがとうございました。また、投稿を更新しました。私は静的変数に 'this'を呼んでいることを完全に忘れてしまった。ありがとうございました:) –