Skip to content

Instantly share code, notes, and snippets.

@raghuvarmabh
Last active August 8, 2019 16:16
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/9a68edddbd78f37fc9f5dfed9d2ad711 to your computer and use it in GitHub Desktop.
Save raghuvarmabh/9a68edddbd78f37fc9f5dfed9d2ad711 to your computer and use it in GitHub Desktop.
Multi Threading synchronization example
import java.util.Arrays;
public class SyncExample {
public static void main(String[] args) {
try {
TicketingSystem ts = new TicketingSystem();
TicketCounter tc1 = new TicketCounter(ts, "Thread 1");
TicketCounter tc2 = new TicketCounter(ts, "Thread 2");
tc1.join();
tc2.join();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class TicketCounter extends Thread {
TicketingSystem ticketingSystem;
public TicketCounter(TicketingSystem ns, String name) {
ticketingSystem = ns;
this.setName(name);
start();
}
@Override
public void run() {
//synchronized (ticketingSystem) {
System.out.println(ticketingSystem.getNextAvailableTicket());
//}
}
}
class TicketingSystem {
final Ticket number1 = new Ticket("Number1", "open");
final Ticket number2 = new Ticket("Number2", "open");
Ticket[] numberList = new Ticket[] {number1, number2};
public synchronized String getNextAvailableTicket() {
String availableNumber = null;
try {
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
availableNumber = number.getName();
break;
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return availableNumber;
}
}
class Ticket {
private String name;
private String status;
public Ticket(String name, String status) {
this.name = name;
this.status = status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment