packagesingleton;publicclassSingletonWay2{publicstaticSingletonWay2 INSTANCE;privateSingletonWay2(){}publicstaticsynchronizedSingletonWay2getInstance(){if(INSTANCE==null){return INSTANCE =newSingletonWay2();}else{return INSTANCE;}}publicstaticvoidmain(String[] args){for(int i =0; i <100; i++){newThread(newRunnable(){@Overridepublicvoidrun(){System.out.println(SingletonWay2.getInstance().hashCode());}}).start();}}}
方法三
packagesingleton;// 锁+双重检测publicclassSingletonWay3{publicstaticvolatileSingletonWay3 INSTANCE;privateSingletonWay3(){}publicstaticSingletonWay3getInstance(){if(INSTANCE==null){synchronized(SingletonWay3.class){if(INSTANCE ==null){
INSTANCE =newSingletonWay3();return INSTANCE;}else{return INSTANCE;}}}else{return INSTANCE;}}publicstaticvoidmain(String[] args){for(int i =0; i <100; i++){newThread(newRunnable(){@Overridepublicvoidrun(){System.out.println(SingletonWay3.getInstance().hashCode());}}).start();}}}
方法四
packagesingleton;publicclassSingletonWay4{privateSingletonWay4(){}privatestaticclassSingeletonWay4Holder{privatestaticfinalSingletonWay4 INSTANCE =newSingletonWay4();}publicstaticSingletonWay4getInstance(){returnSingeletonWay4Holder.INSTANCE;}publicstaticvoidmain(String[] args){for(int i =0; i <100; i++){newThread(newRunnable(){@Overridepublicvoidrun(){System.out.println(SingletonWay4.getInstance().hashCode());}}).start();}}}
方法五
packagesingleton;publicenumSingletonWay5{
INSTANCE;publicstaticvoidmain(String[] args){for(int i =0; i <100; i++){newThread(newRunnable(){@Overridepublicvoidrun(){System.out.println(SingletonWay5.INSTANCE.hashCode());}}).start();}}}
方法一package singleton;/** * 饿汉式 * 类加载到内存中,就实例化一个单例,JVM保证线程安全 * 筋单安用,推荐使用! * 唯一缺点:不管用到与否,类装载时就完成实例化中 */public class SingletonWay1 { public static final SingletonWay1 INSTANCE = new SingletonWay1(); private SingletonWay1(){}; public stat