首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这种在JMM下线程之间传递对象的方式安全吗?

这种在JMM下线程之间传递对象的方式安全吗?
EN

Stack Overflow用户
提问于 2013-09-21 15:22:53
回答 2查看 104关注 0票数 1

我正在寻找一种安全的方法将对象从后台线程传递到UI线程。下面的代码安全吗?

代码语言:javascript
复制
// on background thread
final HugeObject object = constructHugeObjectFromDatabaseAndNetwork();
uiThreadHandler.post(new Runnable() { 
    public void run() { doSomethingWithObject(object); }
});

也就是说,JMM规则是否允许在doSomethingWithObject调用期间部分构造对象?另外,JMM与Android及其虚拟机有多大关系?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-22 03:27:11

是的-处理程序就是这样做的:以线程安全的方式跨线程交换信息。

在实践中,操作者使用一个线程安全(同步)消息队列发布消息,在您的代码与您的对象在UI上发生的任何事情之间的关系之前创建一个发生。

android的最新版本符合JMM的要求。

票数 1
EN

Stack Overflow用户

发布于 2013-09-22 03:35:37

这取决于post()的实现。在引用的代码中没有内存屏障,所以通常不会是线程安全的。但是,在实践中,很难让一个线程在不使用障碍交换对象的情况下运行任务。这里的情况很可能是这样,如果是这样的话,它将是安全的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18934308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档