Java singleton double check realizes control of objects

Entity class for testing:

public class ThreadInstance {

	private String name;
	private Integer numberOf;
	private volatile static ThreadInstance instance;

	private ThreadInstance() {
		super();
	}

	private ThreadInstance(String name, Integer numberOf) {
		super();
		this.name = name;
		this.numberOf = numberOf;
	}

	/**
	 * 多线程单例双重检查
	 * 
	 * @param instance
	 * @return
	 */
	public static ThreadInstance getInstance(ThreadInstance instance) {
		if (null == instance) {
			synchronized (ThreadInstance.class) {
				if (null == instance) {
					return instance = new ThreadInstance();
				}
			}
		}
		return instance;
	}

	public String getName() {
		return name;
	}

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

	public Integer getNumberOf() {
		return numberOf;
	}

	public void setNumberOf(Integer numberOf) {
		this.numberOf = numberOf;
	}

	public static ThreadInstance getInstance() {
		return instance;
	}

	public static void setInstance(ThreadInstance instance) {
		ThreadInstance.instance = instance;
	}

	@Override
	public String toString() {
		return "ThreadInstance [name=" + name + ", numberOf=" + numberOf + "]";
	}

}

Test category:

package domain;

public class ThreadInstance {

	private String name;
	private Integer numberOf;
	private volatile static ThreadInstance instance;

	private ThreadInstance() {
		super();
	}

	private ThreadInstance(String name, Integer numberOf) {
		super();
		this.name = name;
		this.numberOf = numberOf;
	}

	/**
	 * 多线程单例双重检查
	 * 
	 * @param instance
	 * @return
	 */
	public static ThreadInstance getInstance(ThreadInstance instance) {
		if (null == instance) {
			synchronized (ThreadInstance.class) {
				if (null == instance) {
					return instance = new ThreadInstance();
				}
			}
		}
		return instance;
	}

	public String getName() {
		return name;
	}

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

	public Integer getNumberOf() {
		return numberOf;
	}

	public void setNumberOf(Integer numberOf) {
		this.numberOf = numberOf;
	}

	public static ThreadInstance getInstance() {
		return instance;
	}

	public static void setInstance(ThreadInstance instance) {
		ThreadInstance.instance = instance;
	}

	@Override
	public String toString() {
		return "ThreadInstance [name=" + name + ", numberOf=" + numberOf + "]";
	}

}

Run example:
Insert picture description here

Guess you like

Origin blog.csdn.net/qq_44965393/article/details/112728315