MIT-Curricular/OOP/Java/Assignments/FISAC/Q9.java

41 lines
1.5 KiB
Java

import java.util.concurrent.*;
import java.util.*;
class SeatAlreadyBookedException extends Exception {
SeatAlreadyBookedException(String msg) { super(msg); }
}
public class SeminarHall {
static final int TOTAL_SEATS = 15;
static Map<Integer, String> seats = new ConcurrentHashMap<>();
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(20);
for (int i = 1; i <= 15; i++) seats.put(i, "Available");
for (int i = 0; i < 20; i++) {
int userId = i;
executor.submit(() -> {
try {
bookSeat(userId, "User" + userId, "Aadhar" + userId);
} catch (SeatAlreadyBookedException e) {
System.out.println(e.getMessage());
}
});
}
executor.shutdown();
try { executor.awaitTermination(1, TimeUnit.MINUTES); } catch (InterruptedException e) {}
System.out.println("Final Booking Status: " + seats);
}
static void bookSeat(int userId, String name, String aadhar) throws SeatAlreadyBookedException {
int seatNumber = (userId % TOTAL_SEATS) + 1;
synchronized (seats) {
if (!seats.get(seatNumber).equals("Available")) {
throw new SeatAlreadyBookedException("Seat " + seatNumber + " already booked by another user.");
}
seats.put(seatNumber, name + " (" + aadhar + ")");
System.out.println("Seat " + seatNumber + " booked by " + name);
}
}
}