DCL双检查锁机制
public class MyConfig {
private volatile static MyConfig myConfig = null;
private MyConfig(){
}
public static MyConfig getInstance(){
if(null != myConfig){
}else {
synchronized (MyConfig.class){
if(null == myConfig){
myConfig = new MyConfig();
}
}
}
return myConfig;
}
}
静态内置类
public class MyConfig {
private MyConfig(){}
private static class MyConfigHandler{
private static MyConfig myConfig = new MyConfig();
}
public static MyConfig getInstance(){
return MyConfigHandler.myConfig;
}
}
序列化和反序列化
public class MyConfig implements Serializable{
private volatile static MyConfig myConfig = null;
private MyConfig(){
}
public static MyConfig getInstance(){
if(null != myConfig){
}else {
synchronized (MyConfig.class){
if(null == myConfig){
myConfig = new MyConfig();
}
}
}
return myConfig;
}
public Object readResolve(){
return getInstance();
}
public static MyConfig getMyConfig(){
try {
MyConfig myConfig = MyConfig.getInstance();
FileOutputStream fileOutputStream = new FileOutputStream(new File("myobject.txt"));
ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream);
objectOutputStream.writeObject(myConfig);
objectOutputStream.close();
fileOutputStream.close();
System.out.println(myConfig.hashCode());
}catch (Exception e){
e.printStackTrace();
}
MyConfig myConfig = null;
try {
FileInputStream fileInputStream = new FileInputStream(new File("myobject.txt"));
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
myConfig = (MyConfig) objectInputStream.readObject();
objectInputStream.close();
fileInputStream.close();
System.out.println(myConfig.hashCode());
}catch (Exception e){
e.printStackTrace();
}
return myConfig;
}
}
静态代码块
public class MyConfig{
private static MyConfig myConfig = null;
private MyConfig(){}
static{
myConfig = new MyConfig();
}
public static MyConfig getInstance(){
return myConfig;
}
}
枚举实现
public class MyConfig {
public enum MyConfigEnum{
connectionFactofry;
private MyConnection myConnection = null;
private MyConfigEnum(){
myConnection = new MyConnection();
}
public MyConnection getMyConnection(){
return myConnection;
}
}
public static MyConnection getConnection(){
return MyConfigEnum.connectionFactofry.getMyConnection();
}
}
public class MyConnection {
public MyConnection(){
}
}