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();
    			}
    		}
    	}
    
    }
    


  • 相关阅读:
    IOS应用内嵌cocos2dx游戏项目
    C++ 动态内存
    C++ 文件和流
    【转】SQL中的锁、脏读、不可重复的读及虚读
    【转】WCF扩展系列
    【转】WCF设置拦截器捕捉到request和reply消息
    关于拦截器模式的理解
    【转】netty源码分析之LengthFieldBasedFrameDecoder
    【转】使用nginx搭建高可用,高并发的wcf集群
    【转】Nginx 反向代理 负载均衡 虚拟主机配置
  • 原文地址:https://www.cnblogs.com/javafly/p/6037118.html
Copyright © 2011-2022 走看看