条件式がJavaのスレッドセーフな操作であるかどうか疑問に思います。
例えば:
return (mObject != null ? mObject.toString() : "null");
したがって、私の質問は、2つのスレッドがmObjectを変更できる場合、このコードスレッドは安全ですか、それとも開発者は競合状態を処理する必要がありますか?
条件式がJavaのスレッドセーフな操作であるかどうか疑問に思います。
例えば:
return (mObject != null ? mObject.toString() : "null");
したがって、私の質問は、2つのスレッドがmObjectを変更できる場合、このコードスレッドは安全ですか、それとも開発者は競合状態を処理する必要がありますか?
いいえ、それは絶対にスレッドセーフではありません。あなたは間違いなくNullPointerException
ここを得ることができます。もちろん、修正は簡単です。
Object tmp = mObject;
return tmp != null ? tmp.toString() : "null";
または、この特定のケースではさらに簡単に:
return String.valueOf(mObject);
編集:コメントに記載されているように、同期なしで値を更新するために2つのスレッドが競合している場合、それはおそらくより大きな問題の兆候です...しかし、私はあなたが具体的に尋ねた質問に答えようとしただけです。
いいえ、スレッドセーフではありません。ローカルコピーを作成してmObject
ください。
final Object local = mObject;
return (local != null ? local.toString() : "null");
開発者は、変更可能なフィールドを一貫して表示できるようにする必要があります。
これは解決策かもしれません
Object mObject = this.mObject;
return mObject != null ? mObject.toString() : "null";
また
return String.valueOf(mObject);
また
return ""+mObject;