多线程安全
多线程安全技术
1. 代码示例
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class SourcePool {
private static Map<Source, List<Node>> addressPool = new ConcurrentHashMap<Source, List<Node>>();
synchronized static void addSource(Node address, Source source) {
List<Node> addressList = addressPool.get(source);
if (addressList == null) {
addressList = new ArrayList<>();
addressPool.put(source, addressList);
}
if (!addressList.contains(address)) {
addressList.add(address);
}
}
synchronized static void addSource(Node address, List<Source> sourceList) {
for (Source source : sourceList) {
addSource(address, source);
}
}
synchronized static void removeSource(Node address, Source source) {
List<Node> addressList = addressPool.get(source);
if (addressList == null) {
return;
}
if (!addressList.contains(address)) {
return;
}
addressList.remove(address);
}
synchronized static void removeSource(Node address, List<Source> sourceList) {
for (Source source : sourceList) {
removeSource(address, source);
}
}
synchronized static void removeSource(Node address) {
List<Source> sourceList = HolderPool.getSourceList(address);
removeSource(address, sourceList);
}
synchronized static List<Node> getAddress(Source source) {
return addressPool.get(source);
}
synchronized static String getHolderInfo() {
StringBuffer res = new StringBuffer();
List<Source> sourceList = getSourceList();
int sourceCount = sourceList.size();
res.append("当前").append(sourceCount).append("个资源:");
for (int index = 0; index < sourceCount; index++) {
res.append("\n").append(index + 1).append("、");
Source source = sourceList.get(index);
res.append(source).append(":");
List<Node> holderList = addressPool.get(source);
for (Node holder : holderList) {
res.append("\n\t").append(holder);
}
}
res.append("\n");
return res.toString();
}
private static List<Source> getSourceList() {
List<Source> sourceList = new ArrayList<>();
for (Source source : addressPool.keySet()) {
sourceList.add(source);
}
return sourceList;
}
}
2. 解析
Map<Source, List

浙公网安备 33010602011771号