多くの場合、すべてのスレッドが条件変数を参照できるように、volatile
を使用します。参照型の変数にもvolatileが必要ですか?
volatile
フィールドは、これまでのコードではすべてprimitive type
です。
object
フィールドにこの問題がありますか?例:
class a {
public String str;
public List list;
}
strとlistにアクセスするスレッドがある場合、「volatile」を追加する必要がありますか?
Object
への各アクセスはHeap
から直接アクセスし、Object
はプリミティブ型のようにキャッシュされません。
そうですか?
リファレンスはプリミティブのようにキャッシュされる可能性がありますか? – Hesey
@Herseyはい、そうです。 pvblivs答えも参照してください。 – Bringer128
私はフィールド(Object o = null;)を持っていますが、コンストラクタの外で初期化されるためfinalに設定することはできませんが、初期化後は決して他の値に変更されません。 null(nullをチェックすることさえできません)...初期化された後にのみ読み込まれます。この場合、何もする必要はありません - そうですか? (複数のスレッドがオブジェクトにアクセスできます) – ycomp