Se iteratore fail-safe crea una copia separata e ci lavora, come mai è a conoscenza di eventuali modifiche apportate all'originale?Qual è la logica di un iteratore fail-safe?
public class concurrentHashMap {
public static void main(String[] args) throws InterruptedException {
MapCheck obj1 = new MapCheck();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
obj1.put();
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
obj1.iterte();
}
});
t1.start();
t2.start();
t1.join();
t2.join();
}
}
class MapCheck {
Map<Integer,String> map = new ConcurrentHashMap<>();
{
map.put(1, "pujan");
map.put(2, "manish");
map.put(3, "swati");
}
void iterte() throws InterruptedException {
for (int key : map.keySet()) {
Thread.sleep(2000);
System.out.println(map.get(key));
}
}
void put() throws InterruptedException{
Thread.sleep(2000);
map.put(1, "pujan1");
map.put(2, "manish1");
map.put(3, "swati1");
}
}
L'output è:
pujan1
manish1
swati1