Java zárthelyi dolgozat¶
Bíró 3
A zárthelyi dolgozat beadása és automatikus kiértékelése a Bíró 3 rendszeren keresztül történik:
https://biro3.inf.u-szeged.hu/student/login
Amennyiben a minta ZH feladatsort nem látod legkorábban 1 héttel a tényleges ZH előtt, kérlek mielőbb jelezd a problémát a gyakorlavezetődnek!
Általános tudnivalók és követelmények:
-
A zárthelyi dolgozaton 12 pontot minimum el kell érni a 36-ból.
-
A hallgatónak önállóan kell megoldani a feladatot, amelyhez csak a gyakorlatvezetők által biztosított segédanyag használható.
-
Nem megengedett segítség igénybevétele esetén az érintett hallgató a dolgozatra 0 pontot kap.
-
A ZH-n szintaktikailag helyes (fordítási hiba mentes) kódot várunk el, a fordítási hibás megoldással nem szerezhető pont.
-
A kikommentezett kódot a Bíró figyelmen kívül hagyja.
-
A feladat megoldásához tartozó kódot egyetlen .java kiterjesztésű fájlban kell elhelyezni, csak ezt az egy fájlt kell beadni Bírón, tömörítés nélkül.
-
Minden osztály a default package-en belül legyen megvalósítva, a fájl neve és a publikus osztály neve Main legyen.
-
Csak a feladat által kért párhuzamos konstrukciót illetve metódusokat alkalmazd a megvalósításban, nem megengedett utasítás használata esetén pontlevonás jár, de súlyos esetben a Bíró kiértékelés nélkül is 0 pontot adhat.
-
A feladatleírásban meghatározott elnevezéseken (pl. osztály- és metódusneveken) változtatni nem szabad.
-
Figyelj a párhuzamosan futtatható részekre, csak és kizárólag a szükséges kódrészlet legyen része a kritikus szakasznak.
-
Feladatbeadás kötelező, az üresen hagyott beadási felület igazolatlan hiányzásnak minősül.
Minta ZH:
Implementálj egy osztályt egy parkoló reprezentálására, ParkingLot néven, amely 10 kocsit képes befogadni. Készíts el az osztályhoz a következő metódusokat:
-
enter: beenged egy kocsit a parkolóba, amennyiben van szabad hely, egyéb esetben a kocsinak várakoznia kell.
-
parking: 300 ms-ig altatja a szál végrehajtását.
-
leave: kiléptet egy kocsit a parkolóból, és értesíti az esetlegesen várakozókat a parkolóhely felszabadulásáról.
Egy számláló szemafor segítségével biztosítsd, hogy ne tartózkodjon egyidőben a parkolóban a megengedettnél több jármű.
A parkolóban aktuálisan parkoló járműveket egy szabadon választott kollekcióban tartsd nyilván, a kollekcióhoz történő szálbiztos hozzáférést szintén szemaforral valósítsd meg.
Készíts egy Car osztályt, amely a Callable interfészt valósítja meg Void visszatérési értékkel. Az osztály a konstruktorában egy ParkingLot objektumot kap. A szál feladata az enter, parking és a leave metódusok meghívása a megadott sorrendben.
Teszteld a programot a Main osztályban elhelyezett main metódusban. Hozz létre egy ParkingLot objektumot és 100 párhuzamosan futó Car feladatot, illetve egy fix méretű ExecutorService-t 5 szállal.
Template:
1 2 3 4 5 6 7 8 9 10 11 | |
További információk, tanácsok
A párhuzamos programozás nemdeterminisztikussága miatt érdemes a megoldást többször is futtatni. Kiíratások segíthetnek a hibák feltárásában, azonban azok túlzott használata nem javasolt. Törekedjünk áttekinthető és jól strukturált kód írására.
Figyeljünk minden esetben a feladat által meghatározott párhuzamos konstrukcióra, különös figyelmet fordítva a kölcsönös kizárás implementálására. Például, ha a feladat a Monitor koncepció blokk szintű kölcsönös kizárásának használatát kéri, akkor a metódus szintű zárolás vagy a Lock interfész használata nem teljesíti a feladat követelményeit és a Bíró 0 pontot fog adni rá.
Általános cél a párhuzamos végrehajtás maximalizálása a közös változók védelmével. Azaz minden esetben a hallgató feladata, hogy felismerje a párhuzamosan futtatható kódrészeket, és csak és kizárólag a szükséges utasításokat helyezze el a kritikus szakaszba. A megoldás nem helyes, ha az összes kód a kritikus szakaszban van!
Szintén pontlevonás jár, ha olyan utasítást használsz, amit a feladat nem kér az adott metódusban. Tipikus példa, ha a feladat kölcsönös kizárás megvalósítását kéri, de a megoldásban olyan szinkronizációs konstrukciók is szerepelnek, mint például a join vagy a CyclicBarrier. Másik gyakori hiba, hogy szüneteltetsz egy szálat olyan helyen sleep segítségével, ahol annak egyébként futnia kellene.
A megoldás a kitöltési időn belül többször is beadható, és a legjobb pontszámú feltöltés lesz a dolgozat végső pontszáma.