在JMM下,这种在线程之间传递对象的方法是否安全?
编程 65
我正在寻找一种将对象从后台线程传递到UI线程的安全方法。下面的代码安全吗?
// on background thread
final HugeObject object = constructHugeObjectFromDatabaseAndNetwork();
uiThreadHandler.post(new Runnable() {
public void run() { doSomethingWithObject(object); }
});
即,JMM规则是否允许在doSomethingWithObject调用期间实际上部分构造对象?另外,JMM与Android及其虚拟机的相关性如何?
-
是的-处理程序完全可以做到这一点:以线程安全的方式在线程之间交换信息。
在实践中,handlers使用thread safe (synchronized) message queue发布消息,在代码与对象在UI上发生的任何事情之间创建先发生后关系。
Recent versions of android comply with the JMM。2025-04-13 15:07:06