void getProvincePathListAsync(final Callback callback) {
if (mProvincePathList == null) {
new Thread(() -> {
try {
synchronized (Lock) {
if (mProvincePathList == null) {
Lock.wait();
}
}
mMainHandler.post(() -> callback.onResult(mProvincePathList, mTotalRect));
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
} else {
mMainHandler.post(() -> callback.onResult(mProvincePathList, mTotalRect));
}
}
/**
*一个很耗时的任务,做完通知等待结果的亲们
*/
private void init() {
new Thread(() -> {
......加载各个省份城市列的path,很耗时......
synchronized (Lock) {
Lock.notifyAll();
}
}).start();
}
个人觉得这个算是一个比较常见的应用锁的场景了,所有,把他记录下来。
当然我之前遇到这种场景,我通常不是采用这种方式去做的,我直接采用懒加载的方式。
第一次就是很耗时,后面就速度就很快了,很OK了。
但是对比一下今天的这个方式,显然是更好的一种方式,他一上来就加载,不论你现在是否需要,当然你需要的时候,他还没加载好,那你就要等待他加载好了在给你。
姑且叫做饿汉模式吧。