zoukankan      html  css  js  c++  java
  • DesignPattern_Java:SingletonPattern

    单例模式 SingletonPattern

    Ensure a class has only one instance,and provide a global point of access to it.

    单例模式的主要作用是确保一个类只有一个实例存在。

    懒汉式单例类:第一次引用类时,才进行对象实例化。


    package com.DesignPattern.Creational.Singleton;
    
    public class Singleton_lHan {
    
    	private static Singleton_lHan _instance = null;
    
    	private Singleton_lHan() {
    	}
    
    	synchronized public static Singleton_lHan getInstance() {
    		if (_instance == null) {
    			_instance = new Singleton_lHan();
    		}
    		return _instance;
    	}
    }
    


    饿汉式单例类:类加载时,就进行对象实例化。

    package com.DesignPattern.Creational.Singleton;
    
    public class Singleton_eHan {
    
    	private static Singleton_eHan m_instance = new Singleton_eHan();
    
    	private Singleton_eHan() {
    	}
    
    	public static Singleton_eHan getInstance() {
    		return m_instance;
    	}
    }
    

    单例模式的实例

    创建一个饿汉式单例类:GlobalNum.java

    package com.DesignPattern.Creational.Singleton;
    
    public class GlobalNum {
    
    	private static GlobalNum gn = new GlobalNum();
    	private int num = 0;
    
    	public static GlobalNum getInstance() {
    		return gn;
    	}
    
    	public synchronized int getNum() {
    		return ++num;
    	}
    }
    

    SingleDemo.java

    package com.DesignPattern.Creational.Singleton;
    
    public class SingleDemo {
    
    	//测试单例模式
    	public static void main(String[] args) {
    		//创建线程A
    		NumThread threadA = new NumThread("thread A");
    		//创建线程B
    		NumThread threadB = new NumThread("thread B");
    		//启动线程
    		threadA.start();
    		threadB.start();
    
    	}
    }
    //线程类
    class NumThread extends Thread {
    
    	private String threadName;
    
    	public NumThread(String name) {
    		threadName = name;
    	}
    
    	//重写线程的run方法(线程任务)
    	public void run() {
    		GlobalNum gnObj = GlobalNum.getInstance();
    		//循环访问,输出访问次数
    		for (int i = 0; i < 5; i++) {
    			System.out.println(threadName + "第" + gnObj.getNum() + "次访问!");
    			try {
    				this.sleep(1000);	//线程休眠1000毫秒
    			} catch (InterruptedException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    
    }
    


  • 相关阅读:
    nginx反向代理编译异常
    TCP/ip协议栈之内核调优
    Tcp之异常
    Codeforces Round #584
    Codeforces Round #588 (Div. 2)
    Codeforces Round #587 (Div. 3) F
    P4587 [FJOI2016]神秘数 主席树
    P4559 [JSOI2018]列队 主席树
    P4098 [HEOI2013]ALO 可持久化01trie
    4771: 七彩树 主席树
  • 原文地址:https://www.cnblogs.com/javafly/p/6037118.html
Copyright © 2011-2022 走看看