Java单例模式

public class TestSingleton {

	String name = null;

	private TestSingleton() {

	}

	private static volatile TestSingleton instance = null;

	public static TestSingleton getInstance() {
		if (instance == null) {
			synchronized (TestSingleton.class) {
				if (instance == null) {
					instance = new TestSingleton();
				}
			}
		}
		return instance;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void printInfo() {

		System.out.println("the name is:" + name);
	}

}
public class TMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TestSingleton ts1 = TestSingleton.getInstance();
		ts1.setName("jason");
		TestSingleton ts2 = TestSingleton.getInstance();
		ts2.setName("0500");

		ts1.printInfo();
		ts2.printInfo();

		if (ts1 == ts2) {
			System.out.println("创建的是同一个实例");
		} else {
			System.out.println("创建的不是同一个实例");

		}

	}

}
the name is:0500
the name is:0500

创建的是同一个实例

本程序采用的是懒汉式单例模式,线程不安全。 将整个 getInstance() 方法设为同步(synchronized),双重检验锁,instance 变量声明成 volatile ,则此时线程是安全的了。

public class Test_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Test_1 ts1 = new Test_1();
		Test_1 ts2 = new Test_1();
		if (ts1 == ts2) {
			System.out.println("创建的是同一个对象");
		} else {
			System.out.println("创建的不是同一个对象");

		}

		if (ts1.equals(ts2)) {
			System.out.println("创建的是同一个对象");

		} else {
			System.out.println("创建的不是同一个对象");

		}

	}

}
创建的不是同一个对象
创建的不是同一个对象



你可能感兴趣的:(java,单例模式)