Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Khi nào nên dùng Synchronized block trong Java?

Synchronized block là đoạn mã dùng để đồng bộ hóa trên tài nguyên cụ thể của phương thức. Nó khóa một đối tượng cho tài nguyên chung và phạm vi của synchronized block nhỏ hơn synchronized method.

Cú pháp

synchronized(object) { 
    // khối mã 
}

Ở đây, object là tham chiếu đến đối tượng được đồng bộ. Synchronized block đảm bảo lời gọi phương thức thành viên của đối tượng chỉ xảy ra sau khi luồng hiện tại đã nhập thành công monitor của đối tượng.

Ví dụ

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) { // synchronized block  
            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(); 
    } 
}

Kết quả

Adithya : 2 Seats Booking Success Jai : Seats Not Available