赞
踩
一、下面写一个常用的单例类:
- public class Singleton {
- private int id;
- private volatile static Singleton instance=null;
-
- /**
- * 防止其他类调public的new构造方法创建类,只能用getInstance()方法创建类
- */
- private Singleton(){}
-
- /**
- * 获取Singleton对象唯一方法
- * synchronized加锁保证线程同步
- */
- public static Singleton getInstance(){
- if(instance==null){
- synchronized(Singleton.class){
- if(instance==null){
- instance=new Singleton();
- }
- }
- }
- return instance;
- }
-
-
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- }
singleton类只有一个构造方法,它是被private修饰的,客户对象无法用无参数的构造方法创建实例。
此类提供的统一全局创建实例方法是getInstance(),即
Singleton singleton=Singleton.getInstance();
二、测试
写个测试方法,验证下:
- public class TestSingleton {
-
- public static void main(String[] args) {
- Singleton s1=Singleton.getInstance();
- Singleton s2=Singleton.getInstance();
- s1.setId(1);
- s2.setId(2);
- System.out.println("s1.id="+s1.getId());
- System.out.println("s2.id="+s2.getId());
- if(s1.equals(s2)){
- System.out.println("s1,s2 是同一个对象");
- }else{
- System.out.println("s1,s2 不是同一个对象");
- }
- }
-
- }
源码Github地址: https://github.com/readreamer23/SingletonProject
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。