Java 在JMM下,这种在线程之间传递对象的方式安全吗?
我正在寻找一种将对象从后台线程传递到UI线程的安全方法。下面的代码安全吗Java 在JMM下,这种在线程之间传递对象的方式安全吗?,java,android,multithreading,java-memory-model,Java,Android,Multithreading,Java Memory Model,我正在寻找一种将对象从后台线程传递到UI线程的安全方法。下面的代码安全吗 // on background thread final HugeObject object = constructHugeObjectFromDatabaseAndNetwork(); uiThreadHandler.post(new Runnable() { public void run() { doSomethingWithObject(object); } }); 也就是说,JMM规则是否允许在do
// on background thread
final HugeObject object = constructHugeObjectFromDatabaseAndNetwork();
uiThreadHandler.post(new Runnable() {
public void run() { doSomethingWithObject(object); }
});
也就是说,JMM规则是否允许在doSomethingWithObject调用期间部分构造对象?另外,JMM与Android及其虚拟机的相关性如何?是的-处理程序正是为了做到这一点:以线程安全的方式跨线程交换信息 在实践中,使用发布消息,在代码和将在UI上发生的对象之间创建“发生在之前”关系
.这取决于
post()
的实现。引用的代码中没有内存障碍,因此通常不会是线程安全的。但是,在实践中,让一个线程等待任务运行而不使用屏障交换对象变得非常困难。在这里很可能是这样,如果是这样,它将是安全的