1.饿汉式
加载类的时候 就创建了对象
package com.czxy.demo;
public class UserEH {
private static UserEH userEH =new UserEH();
private UserEH(){}
public static UserEH getInstance(){
return userEH;
}
}
2.懒汉式
需要用的时候,才会创建对象
package com.czxy.demo;
public class BookLH {
private static BookLH bookLH;
private BookLH(){}
public static BookLH getInstance(){
if (bookLH==null){
bookLH= new BookLH();
}
return bookLH;
}
}
2.1 懒汉式会遇到线程安全问题
package com.czxy.demo;
public class BookLH {
private static bookLH;
private BookLH(){}
public static BookLH getInstance(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (bookLH==null){
bookLH=new BookLH();
}
return bookLH;
}
public static void main(String[] args) {
for(int i=0;i<10;i++) {
new Thread(new Runnable() {
@Override
public void run() {
BookLH bookLH =BookLH.getInstance();
System.out.println(bookLH.hashCode());
}
}).start();
}
}
}
执行结果
2.2 解决办法 加上同步synchronized
执行结果