reduce thread blocking time

This commit is contained in:
Eugene Zhuravlev
2013-06-25 10:00:59 +04:00
parent 07977e942a
commit 3bdf9aad67
@@ -19,6 +19,7 @@ import gnu.trove.THashMap;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.Collections;
import java.util.Map;
/**
@@ -37,24 +38,20 @@ public class FSCache {
private static final File[] NULL_VALUE = new File[0];
private static final File[] EMPTY_FILE_ARRAY = new File[0];
private final Map<File, File[]> myMap = new THashMap<File, File[]>();
private final Map<File, File[]> myMap = Collections.synchronizedMap(new THashMap<File, File[]>());
@Nullable
public File[] getChildren(File file) {
synchronized (myMap) {
final File[] children = myMap.get(file);
if (children != null) {
return children == NULL_VALUE? null : children;
}
final File[] files = file.listFiles();
myMap.put(file, files == null? NULL_VALUE : (files.length == 0? EMPTY_FILE_ARRAY : files));
return files;
final File[] children = myMap.get(file);
if (children != null) {
return children == NULL_VALUE? null : children;
}
final File[] files = file.listFiles();
myMap.put(file, files == null? NULL_VALUE : (files.length == 0? EMPTY_FILE_ARRAY : files));
return files;
}
public void clear() {
synchronized (myMap) {
myMap.clear();
}
myMap.clear();
}
}