private static void refreshLocal() {
//noinspection unchecked
Map<String, List<LocalFrameworkZip>>[] zipsArray = new Map[TYPE_COUNT];
for (int i = 0; i < TYPE_COUNT; i++) {
zipsArray[i] = new TreeMap<>();
}
for (File dir : DownloadsUtil.getDownloadDirs(DownloadsUtil.DOWNLOAD_FRAMEWORK)) {
if (!dir.isDirectory()) {
continue;
}
for (String filename : dir.list()) {
if (!filename.endsWith(".zip")) {
continue;
}
LocalFrameworkZip zip = analyze(new File(dir, filename));
if (zip != null) {
Map<String, List<LocalFrameworkZip>> zips = zipsArray[zip.type.ordinal()];
List<LocalFrameworkZip> list = zips.get(zip.title);
if (list == null) {
list = new ArrayList<>(1);
zips.put(zip.title, list);
}
list.add(zip);
}
}
}
synchronized (FrameworkZips.class) {
sLocal = zipsArray;
}
}
多个不同的线程通过FrameworkZips类调用到这个代码块时互斥