1 год назад
Java 1587. Напишите Singleton… А с ленивой загрузкой. А если он должен быть потоко-безопасным? А в каких случаях ленивая загрузка хуже?
Singleton - это паттерн проектирования, который гарантирует, что класс имеет только один экземпляр, и предоставляет глобальную точку доступа к этому экземпляру. В Java Singleton может быть реализован с использованием приватного конструктора, статического метода и статической переменной. Пример Singleton с ленивой загрузкой Вот пример реализации Singleton с ленивой загрузкой в Java: public class Singleton { private static Singleton instance; private Singleton() { // приватный конструктор...
06:44
1,0×
00:00/06:44
115,8 тыс смотрели · 3 года назад
1 год назад
🖥 Реализации шаблона Singleton, которые вы должны знать Singleton — это шаблон проектирования в языке Java, который гарантирует, что класс имеет только один экземпляр, и обеспечивает глобальный доступ к этому экземпляру. Синглтоны обычно используются в сценариях, где наличие нескольких экземпляров может привести к непоследовательному или нежелательному поведению. Ленивая загрузка Ленивая загрузка (lazy loading) означает, что вы загружаете синглтон только тогда, когда он вам нужен. Иными словами, вы инициируете экземпляр только при вызове getInstance(). То есть, даже если у вас есть другие статические методы в вашем классе Singleton, которые будут, например, загружать конфигурацию, и эти методы используются для запуска вашего приложения, то процесс инициализации все равно ограничен только методом getInstance(). Таким образом, время запуска вашего приложения не будет зависеть от времени загрузки экземпляра. Ленивая загрузка в классическом синглтоне Ленивая загрузка обычно используется в классическом синглтоне. Давайте сначала рассмотрим классический класс Singleton, который используется в однопоточном приложении. Это простой класс, который можно реализовать там, где у нас есть приватный конструктор, и мы можем вызвать getInstance() для инициализации переменной, если она по-прежнему имеет значение null. Результат должен выглядеть так: public class Singleton { private static Singleton instance; private Singleton() { } public static Singleton getInstance() { if(instance == null){ instance = new Singleton(); } return instance; } } Синхронизированная отложенная загрузка Синхронизация может быть немного сложной, поскольку здесь мы можем использовать два разных подхода: 1. Синхронизируем весь метод getInstance(). 2. Синхронизируем часть метода. Давайте реализуем код: public class ThreadSafeSingleton { private static ThreadSafeSingleton instance; private ThreadSafeSingleton() { } public static synchronized ThreadSafeSingleton getInstance() { if(instance == null){ Main.waitTime(); Main.waitTime(); instance = new ThreadSafeSingleton(); } Main.waitTime(); return instance; } public static ThreadSafeSingleton getInstanceOptimized() { if(instance == null){ synchronized (ThreadSafeSingleton.class){ if(instance == null){ Main.waitTime(); Main.waitTime(); instance = new ThreadSafeSingleton(); } } } Main.waitTime(); return instance; } } ▪Читать дальше @javarush