CyborgBeta
Captain
- Registriert
- Jan. 2021
- Beiträge
- 3.156
Guten Morgen,
ich würde gerne wissen, ob folgendes Konstrukt eine valide Lösung im Sinne von Javas Concurrency-Konzept darstellt, oder ob es hier theoretisch zu Problemen, sprich data loss, kommen kann:
Man soll ja, wenn möglich, nur sehr sparsam mit synchronisierten Codeabschnitten umgehen ...
ich würde gerne wissen, ob folgendes Konstrukt eine valide Lösung im Sinne von Javas Concurrency-Konzept darstellt, oder ob es hier theoretisch zu Problemen, sprich data loss, kommen kann:
Java:
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class STest {
private static volatile int last_inserted_1;
private static volatile int last_inserted_2;
public static void main(String[] args) {
Map<Integer, Integer> myNotSynchronizedConcurrentMap = new HashMap<>();
Thread t1 = new Thread(() -> {
Random rand = new Random();
for (int i = 0; i < 10_000; i++) {
last_inserted_1 = rand.nextInt();
myNotSynchronizedConcurrentMap.put(42, last_inserted_1);
}
});
Thread t2 = new Thread(() -> {
Random rand = new Random();
for (int i = 0; i < 10_000; i++) {
last_inserted_2 = rand.nextInt();
myNotSynchronizedConcurrentMap.put(43, last_inserted_2);
}
});
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(myNotSynchronizedConcurrentMap);
System.out.println(last_inserted_1);
System.out.println(last_inserted_2);
}
}
Man soll ja, wenn möglich, nur sehr sparsam mit synchronisierten Codeabschnitten umgehen ...