Kihagyás

Java zárthelyi dolgozat

2025 tavasz - MINTA csoport, 20 perc

Általános tudnivalók és követelmények:

  • 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 javítás során figyelmen kívül hagyjuk.

  • A ZH során hallgatótársaktól származó vagy AI által generált kód felhasználása nem megengedett (ilyen esetben az érintett hallgatók a ZH-ra 0 pontot kapnak), de az interneten elérhető szakmai forrás (pl. dokumentáció, jegyzet) használható.

  • Minden a feladat megoldásához tartozó kódot egyetlen .java kiterjesztésű fájlban kell elhelyezni, csak ezt az egy fájlt kell beadni CooSpace-en.

  • Minden osztály a default package-en belül legyen megvalósítva, a publikus osztály neve a NEPTUN kódod legyen.

  • Csak a feladat által kért párhuzamos konstrukciót/metódusokat alkalmazd a megvalósításban, nem megengedett utasítás használata esetén pontlevonás jár.

  • A feladatleírásban meghatározott elnevezéseken, metódusdefiníciókon, változóneveken változtatni nem szabad.

  • Az InterruptedException-t dobó metódusokat try-catch blokkal kell lekezelni, a kivételt ne propagáljuk tovább a metódus definíciójában.

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

1. feladat

Implementálj egy osztályt egy parkoló reprezentálására, ParkingLot néven, amely 10 kocsit képes befogadni. Készítsd 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ű. [6 pont]

Készíts egy Car osztályt, amely a Thread osztályból származik. 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. [3 pont]

Teszteld a programot a main metódusban! Hozz létre egy ParkingLot objektumot és 100 párhuzamosan futó Car szálat. [1 pont]

Ne használj a feladat által nem említett párhuzamos konstrukciót.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
public class ABC123 {

    public static void main(String[] args) {
    }
}

class ParkingLot {
}

class Car {
}   

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.

Á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. Vagy ha szüneteltetsz egy szálat olyan helyen sleep segítségével, ahol annak egyébként futnia kellene.

Fontos, hogy jól tagolt, olvaható kódot készíts, illetve ügyelj arra, hogy a változókat a feladatleírás alapján nevezd el. Amennyiben erre a feladatsor nem tér ki, akkor törekedj beszédes változónevek használatára. A nehezen olvasható, nem megfelelően tagolt kódra pontlevonás járhat.

A kabinetes virtualizált környezet esetleges hibái miatt a dolgozatírás során a saját könyvtáradba érdemes dolgozni.

A megoldás a kitöltési időn belül többször is benyújtható, és egyéb jelzés hiányában a legutolsó, a feltételeknek megfelelő feltöltés kerül kiértékelésre.


Utolsó frissítés: 2025-04-28 13:59:06