笔试中手写单例模式一定要写线程安全的
单例模式-懒汉式的安全问题的解决
设计模式:在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。
“套路”
单例设计模式:某个类只能存在一个对象实例
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;
}
}
}
懒汉式为线程不安全的。方式1:效率较差
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;
}
}
}