Câu hỏi

Thread-safe với Singleton trong Java là gì?

Câu trả lời

Một lớp thread-safe singleton được tạo để giúp khởi tạo đối tượng trong môi trường đa luồng. Nó có thể thực hiện bằng nhiều cách:

  • Sử dụng Enum: Enum là cách đơn giản nhất để tạo một lớp thread-safe singleton trong Java vì nó hỗ trợ đồng bộ do chính Java thực hiện.
public enum ThreadSafeSingleton{
    SINGLETON_INSTANCE;
    public void display(){
        System.out.println("Thread-safe singleton Display");
    }
}
// The Singleton class methods can be invoked as below
ThreadSafeSingleton.SINGLETON_INSTANCE.show();
  • Sử dụng trường static: Thread-safe singleton còn có thể được tạo bằng cách tạo thực thể tại thời điểm tải lớp. Điều này được thực hiện bằng cách sử dụng trường static vì Classloader đảm bảo rằng các thực thể được khởi tạo trong quá trình tải lớp sẽ không hiển thị cho đến khi nó được tạo đầy đủ.
public class ThreadSafeSingleton{
    private static final ThreadSafeSingleton INSTANCE = new ThreadSafeSingleton();
    private ThreadSafeSingleton(){ }
    public static ThreadSafeSingleton getInstance(){
        return INSTANCE;
    }
    public void display(){
        System.out.println("Thread-safe Singleon");
    }
}
ThreadSafeSingleton.getInstance().display();

Nhưng nhược điểm của cách này là việc khởi tạo không thể thực hiện theo cách lazy và phương thức getInstance() được gọi trước khi bất kỳ client nào có thể gọi.

  • Sử dụng từ khoá synchronized: Ta có thể dùng từ khoá synchronized trên phương thức getInstance() như bên dưới:
    • Trong cách này, ta có thể thực hiện lazy initialization, và vì ta dùng từ khoá synchronized nên đối tượng được khởi tạo ...
Bạn cần đăng nhập để xem
senior

senior

Gợi ý câu hỏi phỏng vấn

senior

Giải thích về MarshallingDemarshalling trong Java?

middle

Mục đích của việc thu gom rác trong Java là gì?

middle

Trong Java điều gì sẽ xảy ra với đối tượng Exception sau khi xử lý exception?

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào