在Java中,条件表达式是一个线程安全的操作吗?

Pli*_*tos 3 java multithreading thread-safety race-condition conditional-expressions

我想知道条件表达式是否是Java中的线程安全操作.
例如:

return (mObject != null ? mObject.toString() : "null");  
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:如果两个线程可以更改mObject,这个代码线程是安全的,还是开发人员需要处理任何竞争条件?

Jon*_*eet 7

不,这绝对不是线程安全的.你绝对可以NullPointerException来这里.当然,它很容易修复:

Object tmp = mObject;
return tmp != null ? tmp.toString() : "null";
Run Code Online (Sandbox Code Playgroud)

或者,在这种特殊情况下更容易:

return String.valueOf(mObject);
Run Code Online (Sandbox Code Playgroud)

编辑:如评论中所述,如果你真的有两个线程竞相更新没有同步的值,那可能是更大问题的迹象......但我只是试着回答你特别提出的问题.