Рет қаралды 11,233
Hế lô hế lô, Ông dev đây!
Trong phần này mình sẽ tiến hành implement Singleton Design pattern và giải quyết vấn đề multi threading khi sử dụng Lazy initialization nhé.
Tóm tắt:
- Implement private static property
- Implement private constructor
- Implement public static getInstance method
- Mình đã tiến hành cả 2 cách khởi tạo Singleton trong phần code bao gồm:
+ Khởi tạo thẳng vào static property
+ Khởi tạo khi gọi getInstance lần đầu tiên
- Giải quyết vấn đề đa luồng khi khởi tạo ở lần gọi getInstance đầu tiên:
** Vấn đề 1: Các thread chạy cùng lần để khởi tạo instance thì sẽ tạo ra nhiều instance thay vì một và chỉ một.
-- Cách giải quyết: sử dụng lock object( nếu dùng Java thì dùng từ khoá synchronized) thì sẽ khiến các thread khác chờ cho một thread chạy xong getInstance. Nhờ vậy sẽ không xảy ra việc bị khởi tạo nhiều instance.
** Vấn đề 2: Performance sẽ giảm khi chúng ta đồng bộ hoá hàm getInstance vì tất cả các thread gọi lấy instance cùng lần đều phải chờ.
-- Cách giải quyết: Check null (để biết là có instance hay chưa), nếu chưa thì mới khoá hàm lại và khởi tạo, còn không thì return ra instance đã có. Nhờ vậy các thread sẽ không cần phải đợi nếu instance đã được khởi tạo.
- Các vấn đề về đa luồng chỉ xảy ra khi chúng ta sử dụng cách khởi tạo ở lần gọi đầu tiên(lazy initialization).
- Các bạn có thể tìm hiểu từ khoá VOLATILE: khi sử dụng thì hệ thống sẽ lọc ra giá trị mới nhất của biến để sử dụng(ứng dụng rất tốt khi làm việc đa luồng).
Bạn có thể xem các phần trước ở đây:
-Phân tích, trường hợp áp dụng: • Singleton Design Patte...
-Class diagram, các vấn đề về đa luồng: • Singleton Design Patte...
Link của cả playlist design pattern:
• Design Pattern
Source code: github.com/Mil...
-- Để xem những video về lập trình và gaming --
Nhấn vào đây để theo dõi kênh mình nhé: duyngd.com/Sub...
-- Blog của mình --
duyngd.com
-- Facebook page của mình --
/ ongdevvuitinh
-- Ủng hộ Ông Dev --
Cảm ơn các bạn đã quan tâm theo dõi
#Ôngdev #Singleton #DesignPattern