Câu hỏi phỏng vấn Design pattern
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.
java Copy
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 đủ.
java Copy
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

junior

Mô tả một design pattern như thế nào?

middle

Design pattern nào trong thư viện JDK của Java?

middle

Design patterndesign principles khác nhau như thế nào?

Bình luận

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

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