в целом понятно что тут к чему.
Только есть оговорки о особенностях применения синхронизации.
Мне просто хотелось бы услышать мнение о достоинствах и недостатках их, что и в каких случаях лучше всего использовать.
вот самый обычный способ...
package com.journaldev.singleton;
public class ThreadSafeSingleton {
private static ThreadSafeSingleton instance;
private ThreadSafeSingleton(){}
public static synchronized ThreadSafeSingleton getInstance(){
if(instance == null){
instance = new ThreadSafeSingleton();
}
return instance;
}
}
способ ниже был описан на хабре, и на том же хабре писалось что он не работает(прилагалась статья на инглише, но я пока не силен в этом(), подскажет кто что тут не так?
public static ThreadSafeSingleton getInstanceUsingDoubleLocking(){
if(instance == null){
synchronized (ThreadSafeSingleton.class) {
if(instance == null){
instance = new ThreadSafeSingleton();
}
}
}
return instance;
}
и вот тоже есть способ синхронизации через статический метод, в чем его плюс? где лучше использовать?
public class Solution {
public static class OurPresident {
private static OurPresident president;
static {
synchronized (OurPresident.class) {
president = new OurPresident();
}
}
private OurPresident() {
}
public static OurPresident getOurPresident() {
return president;
}
}
}