【发布时间】:2013-08-05 10:47:50
【问题描述】:
我想知道我解决特定问题的方法是否是线程安全的(可能不是,这就是我要问的原因)。假设我们有这段代码,在非 UI 线程上运行:
if (myMap != null)
{
runOnUiThread(new Runnable()
{
@Override
public void run()
{
Something something = myMap.get(someKey);
// update some views and stuff
}
});
}
我猜我无法保证 myMap 在 runnable 实际执行时有效,对吧?如果是这种情况,我应该将 myMap != null 移动到 run() 方法中还是只是在那里复制它?如果我想确保只有在地图不为空时才执行 runOnUiThread 代码,那么最好的方法是什么?
谢谢
【问题讨论】:
-
在初始化 myMap 地图后运行此代码,因此它不会为空。
-
你是从哪个线程调用的?如果是从 UiThread 调用的,会直接内联执行,就好像没有
Runnable一样。 -
我忘了提到代码不是从 UI 线程运行的。将在其中进行编辑。
标签: java android concurrency