【发布时间】:2013-07-21 14:27:22
【问题描述】:
我有一个函数:fillFromDB,它从 SQLite DB 填充一个名为 list 的 ArrayList 实例。
我还有另一个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() 上的列表,然后继续清除并重新填充它吗?
如果没有,我该怎么做?
【问题讨论】:
标签: android multithreading synchronized