Your question is Thread Safety of a Sample Function. Take a moment with it on the right.
Talk me through your thinking if you like. When you're confident, submit your answer and I'll grade it like a real screen (7/10 or better passes).
Trend Micro's endpoint scanning engine runs many worker threads in parallel, each one scanning files and recording signature hits into a shared cache. Here is the cache class as it's currently implemented.
public class ScanResultCache {
private Map<String, Integer> hitCounts = new HashMap<>();
private int totalScans = 0;
public void recordHit(String signatureId) {
if (hitCounts.containsKey(signatureId)) {
int current = hitCounts.get(signatureId);
hitCounts.put(signatureId, current + 1);
} else {
hitCounts.put(signatureId, 1);
}
totalScans++;
}
public int getTotalScans() {
return totalScans;
}
public int getHitCount(String signatureId) {
return hitCounts.getOrDefault(signatureId, 0);
}
}
A single instance of ScanResultCache is shared across all scanning worker threads. Is this class thread-safe? Explain exactly why or why not, referencing specific lines, and describe what you would change to make it safe for concurrent use.