Laboratorium PW Java 1

by Leszek Ciopiński published 2023/04/01 00:04:58 GMT+2, last modified 2023-04-01T00:04:58+02:00

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();
}

}