Kihagyás

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
public class Main {

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


Utolsó frissítés: 2026-03-19 11:33:13