class Konto { //Konto udelame monitorem private int konto; public Konto(int i){ konto =i;} public int stav() { return konto; } public synchronized void vyber(int kolik) { int lokal; //pro zachovani podminek jako u RZ try { lokal = konto; Thread.sleep(100);//////////////////////////////////// konto = lokal - kolik; notify(); } catch (InterruptedException e) {} } public synchronized void vloz(int kolik) { int lokal; try { lokal = konto; Thread.sleep(300);/////////////////////////////////////// konto = lokal + kolik; notify(); } catch (InterruptedException e) {} } } class Koupe extends Thread { private Konto k; Koupe(Konto x, String jmeno) { super(jmeno); k = x; } public void run() { // vstupni bod vlakna System.out.println(getName() + " start."); k.vyber(200); System.out.println(getName() + " ukoncene."); } } class Prodej extends Thread { private Konto k; Prodej(Konto x, String jmeno) { super(jmeno); k = x; } public void run() { // vstupni bod vlakna System.out.println(getName() + " start."); k.vloz(500); System.out.println(getName() + " ukoncene."); } } class Konta { public static void main (String args[]) throws InterruptedException { System.out.println("Hlavni vlakno startuje"); Konto meKonto = new Konto(1000); Koupe nakup = new Koupe(meKonto," nakupuji "); Prodej prodej = new Prodej (meKonto, " prodavam "); nakup.start(); prodej.start(); Thread.sleep(500); System.out.println(meKonto.stav()); System.out.println("Konci hlavni vlakno"); } }