Wątki

Zadanie 9 (4p)

Napisać program symulujący grę w losowanie liczb między dwoma graczami. Jeden ruch każdego gracza polega na wylosowaniu jednej liczby całkowitej z przedziału [1, 100]. Między kolejnymi ruchami gracza należy stosować opóźnienia czasowe (również losowe). Arbiter daje sygnał rozpoczęcia gry i mierzy czas. Wygrywa ten, który po upływie określonego czasu otrzyma większy rezultat będący sumą wszystkich swoich wylosowanych liczb.

Arbiter jest obiektem klasy Referee (np. rozszerzającej Thread), przy tworzeniu obiektu określony jest czas gry. Gracze są obiektami klasy Player (np. rozszerzającej Thread) i posiadają identyfikatory-nazwy. W metodzie main(...) klasy testującej należy uruchomić wątki arbitra i graczy.

Zadanie 10 (6p)
(Producent - konsument)

Producent produkuje produkty i umieszcza je w buforze, a konsument pobiera je stamtąd.

Szczegóły:

Produkty są liczbami całkowitymi wygenerowanymi (wyprodukowanymi) losowo przez producenta.

Bufor jest obiektem klasy Buffer zawierającej między innymi metody get() - pobiera liczbę z bufora i put(int n) - wstawia liczbę do bufora. Bufor (np. w postaci tablicy) ma ograniczoną pojemność. W danej chwili dostęp do bufora może mieć albo producent, albo konsument.

Producent jest obiektem klasy Producer (np. rozszerzającej Thread). Konstruktor Producer(Buffer b) tworzy nowy obiekt-producent, który produkuje i umieszcza produkty w buforze b. Przedefiniowana metoda run() zawiera nieskończoną pętlę: 1. Generuje losowo jedną liczbę całkowitą; 2. Umieszcza ją w buforze za pomocą metody put(int); 3. Zasypia na losowy wybrany czas z przedziału od 0 do 2s.

Konsument jest obiektem klasy Consumer (np. rozszerzającej Thread). Konstruktor Consumer(Buffer b) tworzy nowy obiekt-konsument, który pobiera produkty z bufora b i konsumuje je. Przedefiniowana metoda run() zawiera nieskończoną pętlę: 1. Pobiera jedną liczbę z bufora za pomocą metody int get(); 2. Konsumuje liczbę, czyli wyprowadza ją na konsolę; 3. Zasypia na określony stały czas 1s.

Testowanie:

1. Utworzyć obiekt klasy Buffer,
2. Utworzyć obiekty klas Producer, Consumer i uruchomić wątki, które symulują działanie producenta oraz konsumenta na danym buforze,
3. Program zakończy działanie po określonym czasie 30s.