Câu hỏi phỏng vấn Java
Câu hỏi

Thread-safe với `Sing...

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 ...
senior

senior

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

middle

Trong Java sự khác biệt giữa throwthrows là gì?

middle

Untrusted applets trong Java là gì?

middle

So sánh sự khác nhau String vs StringBuffer vs StringBuilder?

Bình luận

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