我有一个函数:填充从 SQLite DB调用fillFromDB
的实例。ArrayList
list
我还有另一个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()
然后继续清除并重新填充它吗?
如果没有,我该怎么做?