У меня есть это упражнение, но я не понимаю причину правильного ответа:
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
public class Cache {
static ConcurrentHashMap<String, Object> chm = new ConcurrentHashMap<String, Object>();
public static void main(String[] args) {
chm.put("a", "aaa");
chm.put("b", "bbb");
chm.put("c", "ccc");
new Thread(){
public void run(){
Iterator<Entry<String, Object>> it = Cache.chm.entrySet().iterator();
while(it.hasNext()){
Entry<String, Object> en = it.next();
if(en.getKey().equals("a") || en.getKey().equals("b")){
it.remove();
}
}
}
}.start();
new Thread(){
public void run(){
Iterator<Entry<String, Object>> it = Cache.chm.entrySet().iterator();
while(it.hasNext()){
Entry<String, Object> en = it.next();
System.out.print(en.getKey()+", ");
}
}
}.start();
}
}
Было 4 возможных ответа:
- Может печатать любую комбинацию клавиш.
- Может печатать любую комбинацию, кроме: c,
- Может печатать любую комбинацию, кроме: a, или b, или a, b или b, a
- Может печатать любую комбинацию, кроме: b, c,
Правильный ответ для этого упражнения - 3.
Почему это правильный ответ?
Я думал, что это упражнение может напечатать любую комбинацию клавиш, потому что в этой основной части есть два потока, поэтому я не знаю, какой из обоих запустится первым. Если второй поток начнется первым, у меня будут все ключи в ConcurrentHashMap, поэтому он напечатает a и b.
Итак, мой ответ на это упражнение был 1. Но упражнение считает это неправильным ответом. Почему?
Как мне определить, какой поток будет запущен первым?
Большое спасибо!
A.