android处理程序线程安全吗?

时间:2016-10-14 19:04:28

标签: android thread-safety android-handler

我正在对Android项目进行一些重构。我偶然发现了一段我认为非线程安全的奇怪代码。我是否认为此示例可能导致随机崩溃?

public class SampleClass
{
    Object foo = new Object();

    // foo can be set to null in the main thread

    private Handler handler = new Handler()
    {
        public void handleMessage(Message msg)
        {
            if (foo == null)
                return;

            Thread.sleep(600,0);

            // There is a chance foo has been set to null while the thread was asleep...
            foo.doSomething();
        }
    }
}

即使我在默认情况下听到处理程序是线程安全的,但似乎我需要在handleMessage函数中放置同步块以及foo可以设置为null的任何地方。

1 个答案:

答案 0 :(得分:0)

只有当线程处于唤醒状态时,Looper才能将Message传递给处理程序。 'foo'是一个私有字段,如果只从该方法访问它 - 那很好