Skip to content

Instantly share code, notes, and snippets.

@raghuvarmabh
Last active August 9, 2019 21:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save raghuvarmabh/4e45b8b62479d051a7579bc1a55fced0 to your computer and use it in GitHub Desktop.
Save raghuvarmabh/4e45b8b62479d051a7579bc1a55fced0 to your computer and use it in GitHub Desktop.
class TicketCounter extends Thread {
TicketingSystem ticketingSystem;
public TicketCounter(String name) {
this.setName(name);
start();
}
@Override
public void run() {
System.out.println(TicketingSystem.getNextAvailableTicket(this));
}
}
class TicketingSystem {
static final Ticket number1 = new Ticket("Number1", "open");
static final Ticket number2 = new Ticket("Number2", "open");
static Ticket[] numberList = new Ticket[] {number1, number2};
public static String getNextAvailableTicket(Thread ticketCounter) {
String availableNumber = null;
try {
synchronized(ticketCounter){
for (Ticket number: numberList) {
if(number.getStatus() == "open") {
number.setStatus("pending"); // changing the state of the object
System.out.printf("Thread name %s - number found %s \n",Thread.currentThread().getName(), number.getName());
Thread.sleep(5000); // assume processing some business logic
number.setStatus("open"); // decide to put it back due to some error
availableNumber = number.getName();
break;
}
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return availableNumber;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment