public class CountDownTest {
public static Map<String, String> b(Map<String, String> map) {
ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 3, 0L, TimeUnit.MILLISECONDS, new ArrayBlockingQueue(12));
HashMap<String, String> hashMap = new HashMap<>();
int size = map.size();
try {
CountDownLatch countDownLatch = new CountDownLatch(size);
map.forEach((k, v) -> {
executor.submit(
() -> {
String a = v + "2";
hashMap.put(k, a);
countDownLatch.countDown();
}
);
});
countDownLatch.await();
return hashMap;
} catch (Exception e) {
e.printStackTrace();
} finally {
executor.shutdown();
return hashMap;
}
}
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
Map<String, String> a = b(map);
for (String l : a.keySet()) {
System.out.println(a.get(l));
}
}
}
大多数情况下输出: a2,b2,c2 但有时也会输出 a2,b2,或b2,c2,或a2,c2 这种情况,问题出在哪?