L'edició de text ha acabat.
S'han concatenat els dos fitxers.
Contingut dels fitxers:
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Phasellus nec porttitor sem.
Etiam sit amet risus luctus diam semper finibus ut nec mauris.
Etiam a pulvinar tellus, non scelerisque ante.
Sed egestas quam mollis nibh ornare semper mollis vel ex.
Etiam congue finibus dui, ut mattis nibh vulputate et.
Donec congue mauris ut nulla condimentum pellentesque.
Cras sollicitudin congue porta. Nunc eu scelerisque sem.
Crea el programa BuyConcertTickets, que simula
una web on comprar entrades electròniques per concerts
de música.
Aquesta plataforma ha decidit implementar una cua d'espera
per no saturar la plataforma de pagament. La cua d'espera accepta
2 usuaris simultàniament.
L'aplicació crearà 20 persones que volen comprar entrades
d'un concert que sols té aforament 10 persones.
Cal implementar:
Crear els fils de cada comprador.
Esperar que cada comprador acabe de comprar l'entrada per tancar l'aplicació.
Mecansisme de sincronització per gestionar la cua.
Mecansisme de sincronització evitar inconsistència de dades
en la venta d'entrades (que es venguen exactament les 10 entrades,
ni una més, ni una menys).
packageexam1.concert;publicclassTicketWebsite{privateinttotalTickets;privateintticketsLeft;publicTicketWebsite(inttotalTickets){this.totalTickets=totalTickets;this.ticketsLeft=totalTickets;}publicintgetNextTicket(){intnextTicket=ticketsLeft;ticketsLeft--;returnnextTicket;}publicintbuyTicket()throwsInterruptedException{System.out.printf("%s està a la cua.\n",Thread.currentThread().getName());System.out.printf("%s està comprant l'entrada.\n",Thread.currentThread().getName());Thread.sleep(2500);intticket=getNextTicket();System.out.printf("%s ha acabat la compra.\n",Thread.currentThread().getName());System.out.printf("%s ha eixit de la cua.\n",Thread.currentThread().getName());returnticket;}}
BuyerThread.java
packageexam1.concert;publicclassBuyerThreadextendsThread{privateTicketWebsitewebsite;publicBuyerThread(Stringname,TicketWebsitewebsite){super(name);this.website=website;}@Overridepublicvoidrun(){try{intticket=website.buyTicket();if(ticket>0)System.out.printf("%s ha comprat l'entrada número %d.\n",getName(),ticket);elseSystem.out.printf("%s s'ha quedat sense entrada.\n",getName());}catch(InterruptedExceptione){thrownewRuntimeException(e);}}}
packageexam1.sushi;publicclassWaiterextendsThread{privateSushiRestaurantrestaurant;privateintdishes;privateintcurrentDishes;publicWaiter(intdishes,SushiRestaurantrestaurant){super();this.restaurant=restaurant;this.dishes=dishes;this.currentDishes=0;}@Overridepublicvoidrun(){while(currentDishes<dishes){restaurant.retrieveShushiDish();currentDishes++;System.out.printf("Waiter has retrieved dish. (%d/%d)\n",currentDishes,dishes);}}}
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent
a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.