package com.example.demo01;
/**
* 饿汉模式
* @author Guardian
*
*/
public class Person {
public static final Person person = new Person();
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//构造函数私有化
private Person(){
}
//提供一个全局的静态方法
public static Person getPersion(){
return person;
}
}
package com.example.demo01;
import com.example.demo01.Person;
public class MianClass {
public static void main(String[] args) {
Person p1 = Person.getPersion();
Person p2 = Person.getPersion();
p1.setName("zhangsan");
p2.setName("lisi");
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
饿汉模式二
package com.example.demo02;
/**
* 懒汉模式
* @author Guardian
*
*/
public class Person {
private static Person person;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//构造函数私有化
private Person(){
}
//提供一个全局的静态方法
public static Person getPersion(){
if (person == null) {
person = new Person();
}
return person;
}
}
package com.example.demo02;
import com.example.demo02.Person;
public class MianClass {
public static void main(String[] args) {
Person p1 = Person.getPersion();
Person p2 = Person.getPersion();
p1.setName("zhangsan");
p2.setName("lisi");
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
2.懒汉式。
懒汉模式一
package com.example.demo03;
/**
* 懒汉解决多线程模式
* @author Guardian
*
*/
public class Person {
private static Person person;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//构造函数私有化
private Person(){
}
//提供一个全局的静态方法,使用同步方法(解决多线程问题)
public static synchronized Person getPersion(){
if (person == null) {
person = new Person();
}
return person;
}
}
package com.example.demo03;
import com.example.demo02.Person;
public class MianClass {
public static void main(String[] args) {
Person p1 = Person.getPersion();
Person p2 = Person.getPersion();
p1.setName("zhangsan");
p2.setName("lisi");
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
懒汉模式二
package com.example.demo04;
/**
*
* @author Guardian
*
*/
public class Person {
private static Person person;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//构造函数私有化
private Person(){
}
//提供一个全局的静态方法
public static Person getPersion(){
if (person == null) {
synchronized (Person.class) {
person = new Person();
}
}
return person;
}
}
package com.example.demo04;
import com.example.demo02.Person;
public class MianClass {
public static void main(String[] args) {
Person p1 = Person.getPersion();
Person p2 = Person.getPersion();
p1.setName("zhangsan");
p2.setName("lisi");
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}
3.双重检查。
package com.example.demo05;
/**
* 双重检查模式,解决多线程并发问题
* @author Guardian
*
*/
public class Person {
private static Person person;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//构造函数私有化
private Person(){
}
//提供一个全局的静态方法
public static Person getPersion(){
if (person == null) {//两个线程同时进入这个方法时,会出现两个对象
synchronized (Person.class) {
if (person == null) {
person = new Person();
}
}
}
return person;
}
}
package com.example.demo05;
import com.example.demo02.Person;
public class MianClass {
public static void main(String[] args) {
Person p1 = Person.getPersion();
Person p2 = Person.getPersion();
p1.setName("zhangsan");
p2.setName("lisi");
System.out.println(p1.getName());
System.out.println(p2.getName());
}
}