1.懒汉式
(1)使用同步方法的方式:
package com.java.single;
/**
-
懒汉式
-
@author jack
-
@create 2019-07-10 22:26
*/
public class LazySingle {
public static void main(String[] args) {
Dog dog = Dog.getDog() ;
System.out.println(dog);
}
}
class Dog{
private static Dog dog = null ;
private Dog(){}
public static synchronized Dog getDog(){
if (dog ==null){
dog = new Dog() ;
}
return dog ;
}
}
(2)使用同步代码块:
package com.java.single;
/**
-
懒汉式
-
@author jack
-
@create 2019-07-10 22:26
*/
public class LazySingle {
public static void main(String[] args) {
Dog dog = Dog.getDog() ;
System.out.println(dog);
}
}
class Dog {
private static Dog dog = null;private Dog() {
}
public static Dog getDog() {
//当需要对象为空时再进入可以提高效率
if (dog == null) {
synchronized (Dog.class) {
if (dog == null) {
dog = new Dog();
}} } return dog;
}
}
2.饿汉式汉式:
package com.java.single;
/**
-
饿汉式
-
@author jack
-
@create 2019-07-10 22:14
*/
public class EagerSingle {
public static void main(String[] args) {
Person person = Person.getPerson() ;
System.out.println(person);
}
}
class Person{
private static final Person person = new Person() ;private Person() {
}
public static Person getPerson(){
return person ;
}
}
两种创建方式的区别:
懒汉式线程不安全,需要加上同步锁,同步锁影响了程序执行效率。空间占用更少
饿汉式天生线程安全,类加载的时候初始化一次对象,效率比懒汉式高。但是占用了更多的空间