9. Cvičení

Toto cvičení je zaměřeno na základní práci s vlákny.

Úkoly na cvičení

Úloha Bank account

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ě.

Úloha Producent-Konzument

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).

Úloha Bounce

Reseni 2017/18: zde

Stáhněte si zdrojové kódy z: lokální kopie ZDE, Maven verze

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.

Materiály na cvičení

courses/b0b36pjv/tutorials/09/start.txt · Last modified: 2022/02/19 19:42 by seredlad