我有一个函数:填充从 SQLite DB调用fillFromDB的实例。ArrayListlist
我还有另一个Thread应该清除它list并重新填充它。
我在列表中遇到了一些问题,因为有时另一个会Thread清除列表,而第一个仍在填充它,从而导致IndexOutOfBoundsException适配器。
// This occurs onCreate()
fillFromDb(list);
downloadAndRepopulateList(list);
private void downloadAndRepopulateList(List list) {
new Thread(new Runnable() {
@Override public void run() {
list.clear();
// Some other clode
}
}
}
我知道问题是因为它们不是线程安全的,但我以前从未使用synchronized过。
所以我的问题是:
如果我像这样更改下载功能:
private void downloadAndRepopulateList(List list) {
new Thread(new Runnable() {
@Override public void run() {
synchronized(list) {
list.clear();
// Some other clode
}
}
}
}
它会等待 UIThread 完成填充列表fillFromDb()然后继续清除并重新填充它吗?
如果没有,我该怎么做?