java单例模式

来源:互联网 发布:数控编程用什么格式 编辑:程序博客网 时间:2024/06/15 23:39

写法一(饿汉式):

       public class Test{

              private static Test test = new Test();

              public Test(){ }

              public static Test getInstance(){

                     return test;

          }

   }



写法二(懒汉式):

       public class Test{

              private static Test test = null;

              public Test(){ }

              public static Test getInstance(){

                    if(test == null){

                      test = new Test();

               }

                     return test;

          }

   }


    对于饿汉式,当类被加载的时候,已经创建好了一个静态对象,因此,是线程安全的,但缺点是在这个对象还没被使用的时候就已经被创建出来了。

    对于懒汉式,缺点是非线程安全的。例如当第一个线程执行到判断语句if(test == null)时,第二个线程执行判断语句if(test == null),接着第一个线程执行语句test = new Test(),第二个线程也执行test = new Test(),在这种多线程环境下,可能会创建出两个对象。当然这种写法的优点是按需创建对象,只有对象被使用的时候才会被创建。