Search
Toto cvičení je zaměřeno na základní práci s vlakny.
Stáhněte si zdrojové kódy z : lokální kopie ZDE, Maven verze
Spusťte main metodu třídy PJVHodina10BankAccount.java. Vykonání této metody trvá poměrně dlouhou dobu.
V této metodě se vytváří několik instancí třídy Person. Každá instance třídy Person má atribut typu BankAccount. Instance třídy BankAccount představuje bankovní účet. Bankovní účet má metody addAmount a getBalance, vykonání těchto metod trvá poměrně dlouhou dobu, což způsobuje dlouhé trvání main metody.
Metoda main dále vytváří instance tříd Work a Shop. Tyto instance dostanou jako vstupní parametry, List Person a [] double. Na instanci třídy Work je poté volána metoda payPayments(), tato metoda bere postupně jednotlivé Person a k jejich účtu přičítá částky, které ji byly zadány v konstruktoru. Třída Shop pracuje obdobně, s tím rozdílem, že dané částky z daných účtů vybírá.
Po doběhutí všech transakcí jsou vypsány hodnoty zůstatků na všech učtech. Zůstatky všech Person, poté co jim byla vyplacena výplata a zaplatily účty jsou nula.
Upravte Kód tak aby výpočty v payPayments() a makeCustomersPayBills() probíhaly paralelně a celková doba výpočtu se zkrátila. Kód v ostatních třídách měňte pouze minimálně.
Stáhněte si zdrojové kódy z: lokální kopie ZDE, Maven verze
Třída PJVHodina10 obsahuje metodu main, tato metoda nainicializuje pole producentů. Každý producent ve svém vlákně poté načítá jednotlivá slova ze souboru a vkládá je na zásobník (nezapomente v main() vytvorit instanci vaseho vlastniho zasobniku). Dále je vytvořeno pole konzumentů, tito konzumenti vybírají ze zásobníku slova, která tam vložili producenti.
Při spuštění metody main program havaruje, zásobník totiž neexistuje. Vaším úkolem je tento zásobník naimplementovat tak, aby program běžel správně (konzumenti přečtou všechny slova ze souborů, vloží je na zásobník, producenti přečtou všechna vložená slova).
Metoda main vytvoří instanci modelu a instanci View. Při updatu Modelu a volání notifyObservers() dochází k překreslení View. Protože Modelem nikdo nemanipuluje, View zobrazuje pouze nehybnou scénu (Zobrazuje červený kruh v levém horním rohu).
Implementujte třídu Controller, jejíž instance spustí vlastní vlákno. V tomto vláknu bude Controller měnit parametry modelu, bude notifikovat View aby se překreslilo.