Java Academy · Les

Veelvoorkomende concurrencybugs

Herken veelvoorkomende concurrencybugs: racecondities, deadlocks en zichtbaarheidsproblemen.

Les 3 van 38 stappen

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.

Gratis beginnen

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

  1. Synchronisatie en locks
  2. Atomic en concurrente collecties
  3. Veelvoorkomende concurrencybugs
← Terug naar Java Academy