Zurück zum Manuskript
// Datei: LostUpdate.java // Datum: 02.11.2018 // Autor: Brecht // Thema: Zwei Threads greifen 100-mal miteinander konkurrierend // auf eine int-Variable mit dem Wert 1 zu und erhöhen // ihn jeweils um 1. Ausgabebeispiele: // Erhalte 34x2 und 66x3 // Erhalte 25x2 und 75x3 // Erhalte 29x2 und 71x3 // Erhalte 35x2 und 65x3 // ------------------------------------------------------------- class Zaehler { int i = 0; // Der Zähler void update() { i++; } // Das Update int getValue() { return i; } void setValue(int wert) { this.i = wert; } // Der Anfangswert } // ------------------------------------------------------------- class MyThread extends Thread { Zaehler myz; MyThread(Zaehler za) { this.myz = za; } public void run() { try { Thread.sleep(50); } catch(Exception e) { System.out.println("Sleep-Fehler"); System.exit(0); } myz.update(); } } // ------------------------------------------------------------- class LostUpdate { public static void main(String[] unused) throws Exception { int anz2 = 0; int anz3 = 0; Zaehler z = new Zaehler(); for(int k=0; k<100; k++) { MyThread t1 = new MyThread(z); MyThread t2 = new MyThread(z); z.setValue(1); // Jeweiliger Anfangswert t1.start(); t2.start(); t1.join(); t2.join(); if(z.getValue() == 2) anz2++; else anz3++; } System.out.println("Erhalte "+anz2+"x2 und "+anz3+" x3"); } }

Zurück zum Manuskript