java - Android runOnUiThread线程安全

标签 java android concurrency

我想知道我解决特定问题的方法是否是线程安全的(可能不是,这就是我要问的原因)。假设我们有这段代码,在非 UI 线程上运行:

if (myMap != null)
{
    runOnUiThread(new Runnable()
    {
        @Override
        public void run()
        {
           Something something = myMap.get(someKey);
           // update some views and stuff                                       
        }
    });
}

我猜我无法保证 myMap 在可运行对象实际执行时有效,对吧?如果是这种情况,我应该将 myMap != null 移动到 run() 方法中还是只在那里复制它?如果我想确保仅当映射不为空时才执行 runOnUiThread 代码,最好的方法是什么?

谢谢

最佳答案

这就像在执行您提供的代码之前定义 myMap 一样简单:

    Map<String, String> myMap = new Hashmap<String, String>();
    //if (myMap != null)
   // {
        runOnUiThread(new Runnable()
        {
            @Override
            public void run()
            {
               Something something = myMap.get(someKey); //myMap won't be null
               // update some views and stuff                                       
            }
        });
   // }

如果你想检查里面是否有任何数据,那么你可以使用size()方法

if(myMap.size() != 0) {
//do your stuffs
}

关于java - Android runOnUiThread线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18056333/

相关文章:

Android更改tabwidget中所选标签的高度

c++ - 对包含整数的文本文件进行排序,必须逐行进行排序

C#异步等待实现

java - 如何使用 selenium webdriver 和 java 通过匹配文本模式从下拉列表中选择选项

Android Studio 从存储库导入 aar 文件使依赖项消失

java - 使用 JavaWS 在表单数据中发布文件

android - 按键事件在 Android 设备中不起作用

scala - 并行遍历文件中的行(Scala)?

java - 程序类型已存在 : com. google.common.annotations.GwtCompatible

java - 调试 SSLSocket.startHandshake 异常