En la prueba escrita, el modo singleton escrito a mano debe ser seguro para subprocesos.
Resolución de problemas de seguridad de estilo perezoso en modo singleton Modo de
diseño: después de una gran cantidad de práctica resumida y teorizada, se resumen y teorizan la estructura óptima del código, el estilo de programación y el método de pensamiento de resolución de problemas.
El
patrón de diseño singleton de "rutina" : solo puede existir una instancia de objeto en una clase
public class SingletonTest1{
public static void main(String[] args){
Bank bank1 = new Bank();
Bank bank2 = new Bank();
}
}
//**饿汉式**上来就new个对象
class Bank{
//1.私有化类的构造器
private Bank(){
//2.内部创建类的对象,要求此对象也声明为静态的;
private static Bank instance = new Bank();
//3.提供公共的静态的方法,返回类的对象
public static Bank getInstance(){
return instance;
}
}
}
//**懒汉式**啥时候用啥时候造
public class SingletonTest2{
public static void main(String[] args){
Order order1 = Order.getInstance();
Order order2 = Order.getInstance();
}
}
class Order{
//1.私有化类的构造器
private Order(){
//2.声明当前类的对象,没有初始化
private static Order instance = null;
//3.声明public、static的返回当前类对象的方法
public static Order getInstance(){
if(instance == null){
instance = new Order();
}
return instance;
}
}
}
El perezoso no es seguro para los hilos. Método 1: baja eficiencia
public class SingletonTest2{
public static void main(String[] args){
Order order1 = Order.getInstance();
Order order2 = Order.getInstance();
}
}
class Order{
private Order(){
private static Order instance = null;
//1 public static synchronized Order getInstance(){
public static Order getInstance(){
//2 synchroized(Order.class){
if(instance == null){
instance = new Order();
}
return instance;
}
}
}
class Order{
private Order(){
private static Order instance = null;
public static Order getInstance(){
//效率较高,相当于加个牌子,告诉后来线程不需要等待
if(instance == null){
synchroized(Order.class){
if(instance == null){
instance = new Order();
}
return instance;
}
}
}