Java实现单例模式的3中实现方式

来源:互联网 发布:linux tar 解包 编辑:程序博客网 时间:2024/06/08 13:57

第一种实现方式

/** * 类描述:使用DCL双检查锁机制      */public class MyObject {private volatile static MyObject myObject;private MyObject(){}public static MyObject getInstance(){if (myObject!=null) {}else{synchronized(MyObject.class){if (myObject == null) {myObject=new MyObject();}}}return myObject;} }
public class MyThread extends Thread{@Overridepublic void run(){System.out.println(MyObject.getInstance().hashCode());}}
public class Run {public static void main(String[] args) {MyThread t1=new  MyThread();MyThread t2=new  MyThread();MyThread t3=new  MyThread();t1.start();t2.start();t3.start();}}
第二种实现方式
/** * 使用静态内置类实现单例模式 */public class MyObject {private static class MyObjectHandler{private static MyObject myObject=new MyObject();}private MyObject(){}public static MyObject getInstance(){return MyObjectHandler.myObject;}}
public class MyThread extends Thread{@Overridepublic void run(){System.out.println(MyObject.getInstance().hashCode());}}
public class Run {public static void main(String[] args) {MyThread t1=new  MyThread();MyThread t2=new  MyThread();MyThread t3=new  MyThread();t1.start();t2.start();t3.start();}}
第三种实现方式

/** * 使用static代码块实现单例模式 * **/public class MyObject {private static MyObject instance = null;private MyObject(){}static{instance=new MyObject();}public static MyObject getInstance(){return instance;}}
public class MyThread extends Thread{@Overridepublic void run(){System.out.println(MyObject.getInstance().hashCode());}}
public class Run {public static void main(String[] args) {MyThread t1=new  MyThread();MyThread t2=new  MyThread();MyThread t3=new  MyThread();t1.start();t2.start();t3.start();}}



原创粉丝点击