这里直接给出几种懒汉模式的单例多线程安全的写法。
这种写法就是普通的单例模式,但是是非线程安全的,至于原因,根据前面的多线程基础应该可以自己总结出来。
public class MyObject1 {
private static MyObject1 myobject;//“懒汉模式的”
private MyObject1(){}
public static MyObject1 getInstance(){
//延迟加载
if(myobject != null){
}else{
myobject = new MyObject1();
}
return myobject;
}
}
以下的写法是可以实现多线程安全的懒汉模式的单例。
/**
*线程安全的单利模式
*此种方式实现的单利模式效率不高,但是线程安全
*/
public class MyObject2 {
private MyObject2 myobject;
private MyObject2(){}
synchronized public MyObject2 getInstance(){
if(myobject != null){}else{
myobject = new MyObject2();
}
return myobject;
}
}
方法二:
/**
*使用DCL双检查锁的机制,在保证线程安全的前提下,有效提高了效率
*/
public class MyObject3 {
private MyObject3 myobject;
private MyObject3(){}
public MyObject3 getInstance(){
if(myobject == null){
synchronized(MyObject3.class){
if(myobject==null){
myobject = new MyObject3();
}
}
}
return myobject;
}
}
方法三:
/**
*使用静态内置类实现单例模式
*/
public class MyObject4 {
private static class MyObjectHandler{
private static MyObject4 myObject = new MyObject4();
}
private MyObject4(){}
public static MyObject4 getInstance(){
return MyObjectHandler.myObject;
}
}
方法四:
/**
*本例通过static代码块实现单利模式,同样的实现了线程安全
*/
public class MyObject5 {
private static MyObject5 myobject= null;
private MyObject5(){}
static{
myobject=new MyObject5();
}
public static MyObject5 getInstance(){
return myobject;
}
}
方法五:
import java.sql.Connection;
/**
* 本例通过enum枚举数据类型实现单利模式
* @author 24540
*
*/
public class MyObject6 {
public enum MyEnumSingleton{
connectionFactory;
private Connection connection;
private MyEnumSingleton(){
System.out.println("创建myObject、对象");
String url = "jdbc:sqlserver...";
//在这里进行一系列的操作
}
public Connection getConnection(){
return connection;
}
}
public static Connection getConnection(){
return MyEnumSingleton.connectionFactory.connection;
}
}