Synchronization Block is a piece of code that can be used to perform synchronization on any specific resource of a method. Synchronization block is used to lock any shared resource object, and the scope of the synchronization block is smaller than synchronization method.
synchronized(object) { // block of code }
Here, Object is a reference to the object being synchronized. A synchronized block ensures that an object's member methods are called only after the current thread has successfully entered the object's monitor.
class TicketCounter { int availableSeats = 2; void bookTicket(String name, int numberOfSeats) { if((availableSeats >= numberOfSeats) && (numberOfSeats > 0)) { System.out.println(name+" : "+ numberOfSeats + " Seats Booking Success"); availableSeats -= numberOfSeats; } else { System.out.println(name +" : Seats Not Available"); } } } class TicketBookingThread extends Thread { TicketCounter tc; String name; int seats; TicketBookingThread(TicketCounter tc, String name, int seats) { this.tc = tc; this.name = name; this.seats = seats; } public void run() { <strong> synchronized(tc) { // synchronized block </strong> tc.bookTicket(name, seats); } } } public class SynchronizedBlockTest { public static void main(String[] args) { TicketCounter tc = new TicketCounter(); TicketBookingThread t1 = new TicketBookingThread(tc, "Adithya", 2); TicketBookingThread t2 = new TicketBookingThread(tc, "Jai", 2); t1.start(); t2.start(); } }
Adithya : 2 Seats Booking Success Jai : Seats Not Available
The above is the detailed content of In Java, when can we use synchronized blocks?. For more information, please follow other related articles on the PHP Chinese website!