import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import java.util.List; /** * Created by zhangbing on 2017/3/17. */ public class CachePackageManager { public volatile static CachePackageManager instance; private List<PackageInfo> mListPackageInfos; private boolean isChange = true; private PackageManager mPackageManager; private CachePackageManager(){} private CachePackageManager(Context context){ mPackageManager = context.getPackageManager(); } //单例模式。加锁 public static CachePackageManager getInstance(Context context) { if (instance == null) { synchronized (CachePackageManager.class) { if (instance == null) { instance = new CachePackageManager(context); } } } return instance; } public void setChange(boolean isChange){ this.isChange = isChange; } public List<PackageInfo> getPackageInfos(int flag){ if (mListPackageInfos == null || isChange) { mListPackageInfos = mPackageManager.getInstalledPackages(flag); isChange = false; } return mListPackageInfos; } }synchronized (CachePackageManager.class) 加锁可以选择对象或者字节码class文件。类似哪个线程先抢到这个锁文件(CachePackageManager.class)了。就占有了锁文件,别人就进不来了。等到 别人用完出来了。你再抢到这个锁文件就可以执行同步方法了。
同步代码块。同步方法 synchronized
最新推荐文章于 2022-08-19 22:43:38 发布