Laboratorium PW Java 1
Poniższe zadania są do wstępu teoretycznego do instrukcji PW11 i PW12
Niniejsze zadania obowiązują na zajęcia w dniu 01.04.2023
1. Proszę stworzyć niezmienną klasę opisującą kwadrat zawierający informacje o jego położeniu i jego wymiary. Klasa powinna umożliwiać wykonywanie następujących operacji: rozciąganie oraz przesuwanie figury. Proszę opracować program testujący użycie stworzonej klasy.
Podpowiedź: Zapamiętywać środek i wymiary figur.
2. Proszę stworzyć program zawierający co najmniej dwa wątki, które będą odczytywać i zapisywać współdzieloną zmienną typu long. Dostęp do zmiennej powinien być zrealizowany wykorzystując:
a) modyfikator volatile,
b) blok lub bloki synchronizowane,
c) metodę lub metody synchronizowane,
d) metody wait() oraz notify() klasy Object.
3. Proszę stworzyć aplikacje składające się z kilku wątków zapisujących i odczytujący dane przechowywane w zbiorach:
a) HashSet z własną synchronizacją wykorzystującą metody lub bloki synchronizowane,
b) Collections.synchronizedSet(new HashSet()),
c) ConcurrentSkipListSet,
d) CopyOnWriteArraySet.
Przykład do zadania 3.:
import java.util.Random;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class zad1c {
static class TestConcurrentSkipListSet implements Runnable {
ConcurrentSkipListSet<Integer> concurrentSkipListSet;
public TestConcurrentSkipListSet(int nr, ConcurrentSkipListSet<Integer> concurrentSkipListSet) {
this.concurrentSkipListSet = concurrentSkipListSet;
}
@Override
public void run() {
Random random = new Random();
int newValue = random.nextInt(10);
concurrentSkipListSet.add(newValue);
System.out.println("Dodaje " + newValue);
}
}
public static void main(String[] args) {
ExecutorService executorService = Executors.newCachedThreadPool();
ConcurrentSkipListSet<Integer> concurrentSkipListSet = new ConcurrentSkipListSet<Integer>();
for (int i = 0; i < 10; i++)
if (i % 2 == 0) {
executorService.execute(new TestConcurrentSkipListSet(i,
concurrentSkipListSet));
try {
TimeUnit.MILLISECONDS.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
System.out.println(concurrentSkipListSet);
}
executorService.shutdown();
}
}