এক সিঙ্ক্রোনাইজড ব্লক হল কোডের একটি টুকরো যা মেথডের যেকোনো নির্দিষ্ট রিসোর্সে সিঙ্ক্রোনাইজেশন পারফর্ম করতে ব্যবহার করা যেতে পারে। একটি সিঙ্ক্রোনাইজড ব্লক যেকোনো শেয়ার্ড রিসোর্সের জন্য একটি অবজেক্ট লক করতে ব্যবহৃত হয় এবং সিঙ্ক্রোনাইজড ব্লকের স্কোপ সিঙ্ক্রোনাইজড মেথড-এর চেয়ে ছোট।
সিনট্যাক্স
synchronized(object) {
// কোড ব্লক
}
এখানে, object হল সিঙ্ক্রোনাইজ করা হচ্ছে এমন অবজেক্টের রেফারেন্স। একটি সিঙ্ক্রোনাইজড ব্লক নিশ্চিত করে যে একটি অবজেক্টের সদস্য মেথডে কল শুধু তখনই ঘটবে যখন বর্তমান থ্রেড সফলভাবে অবজেক্টের মনিটরে প্রবেশ করবে।
উদাহরণ
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() {
synchronized(tc) { // সিঙ্ক্রোনাইজড ব্লক
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