Veelvoorkomende concurrencybugs
Herken veelvoorkomende concurrencybugs: racecondities, deadlocks en zichtbaarheidsproblemen.
Veelvoorkomende concurrencybugs is een gratis Java Academy-les op CoddyKit. Dit is les 3 van 3. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 3 lessen.
Introductie
Gelijktijdigheid kan fouten veroorzaken: racecondities, deadlocks, starvation en zichtbaarheidsproblemen.
Racecondities
Racecondities ontstaan wanneer threads elkaar onvoorspelbaar afwisselen, wat tot onjuiste resultaten leidt.
Code: raceconditie
Zonder synchronisatie overlappen verhogingen elkaar, waardoor onjuiste aantallen ontstaan.
public class Main {
private int count = 0;
public void increment() { count++; }
public static void main(String[] args) throws Exception {
Main obj = new Main();
Thread t1 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
Thread t2 = new Thread(() -> { for(int i=0;i<1000;i++) obj.increment(); });
t1.start(); t2.start();
t1.join(); t2.join();
System.out.println("Count (expected 2000) = " + obj.count);
}
}
Deadlock
Deadlock: twee threads houden elk een vergrendeling vast en wachten op de vergrendeling van de andere, waardoor beide vastlopen.
Code: deadlock
Deze code kan een deadlock veroorzaken: elke thread wacht oneindig op de vergrendeling van de andere.
public class Main {
private final Object lock1 = new Object();
private final Object lock2 = new Object();
public void method1() {
synchronized(lock1) {
try { Thread.sleep(50); } catch(Exception e) {}
synchronized(lock2) { System.out.println("method1"); }
}
}
public void method2() {
synchronized(lock2) {
try { Thread.sleep(50); } catch(Exception e) {}
synchronized(lock1) { System.out.println("method2"); }
}
}
public static void main(String[] args) {
Main obj = new Main();
new Thread(obj::method1).start();
new Thread(obj::method2).start();
}
}
Code: zichtbaarheidsprobleem
Zonder volatile ziet de ene thread de updates van de andere mogelijk niet door caching.
public class Main {
private static boolean flag = false;
public static void main(String[] args) throws Exception {
Thread writer = new Thread(() -> { flag = true; });
Thread reader = new Thread(() -> { while(!flag) {} System.out.println("Flag seen true"); });
writer.start(); reader.start();
writer.join(); reader.join();
}
}
Controle van gelijktijdigheidsfouten
Snelle controle: Welk probleem ontstaat wanneer twee threads oneindig op elkaars vergrendelingen wachten?
Samenvatting
Samenvatting: Fouten zijn onder andere racecondities, deadlocks en zichtbaarheidsproblemen. Synchronisatie en volatile helpen ze voorkomen.
Leer Java met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 104
- Lessen
- 374
Veelgestelde vragen
Is de les “Veelvoorkomende concurrencybugs” gratis?
Ja — de volledige tekst van “Veelvoorkomende concurrencybugs” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 3 lessen.
Wat leer ik in “Veelvoorkomende concurrencybugs”?
Herken veelvoorkomende concurrencybugs: racecondities, deadlocks en zichtbaarheidsproblemen. Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Java Academy te beginnen?
Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 3.
Hoe lang duurt de les “Veelvoorkomende concurrencybugs”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Java Academy?
Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Synchronisatie en locks
- Atomic en concurrente collecties
- Veelvoorkomende concurrencybugs