今天看到别人写的一个读取等待的场景

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了。

但是对比一下今天的这个方式,显然是更好的一种方式,他一上来就加载,不论你现在是否需要,当然你需要的时候,他还没加载好,那你就要等待他加载好了在给你。

姑且叫做饿汉模式吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容