Java Android-更新arraylist时的线程安全

Java Android-更新arraylist时的线程安全,java,android,concurrency,Java,Android,Concurrency,我的活动由一个BroadcastReceiver和一个AsyncTask组成,它们都会更新ArrayList(非常频繁)。我知道AsyncTask在后台运行,BroadcastReceiver和AsyncTask线程可能会同时更新ArrayList。我怎样才能使它们线程安全 编辑:正如alexander所提到的,除非您明确实现它,否则BroadcastReceiver将在主线程上运行。AsyncTask将作为单独的线程运行。 BroadcastReceiver通常在主线程上运行,除非您在“reg

我的活动由一个BroadcastReceiver和一个AsyncTask组成,它们都会更新ArrayList(非常频繁)。我知道AsyncTask在后台运行,BroadcastReceiver和AsyncTask线程可能会同时更新ArrayList。我怎样才能使它们线程安全


编辑:正如alexander所提到的,除非您明确实现它,否则BroadcastReceiver将在主线程上运行。

AsyncTask将作为单独的线程运行。 BroadcastReceiver通常在主线程上运行,除非您在“registerReceiver”中另有指定(请参阅此处: )

您可以使用Budius编写的向量,也可以使用synchronized块包装对ArrayList的所有访问:

synchronized(myList){
    myList.add(itemToAdd);
}

尝试创建队列结构除非向我们显示访问和更新列表的代码(在两个线程中),否则无法给出可靠的答案。(有多种方法可能有效…)尝试在任何时候只访问一次。存储/排队任何其他传入更改。当然,这仅仅取决于立即改变的重要性。一种非常简单的方法是,创建一个静态变量,并在每次发生更改时对其进行更改,这也是可以更改ArrayList的条件。也许有更好的办法,但这应该行得通。例如,StringBuilder和BufferedStringBuilder也存在此问题(BufferedStringBuilder是线程安全的)。也许你可以在那里找到一些有用的东西。。。我希望这有点帮助。约翰桑克斯,我不知道主线程上运行了广播接收器。接得好!同时,由于Budius,我决定使用Vector。