java编程题:编写一个单例模式

/**
 * java编程题:编写一个单例模式 
 */
public class Singleton {

	/*
	//1. 饿汉式,饿汉式,线程安全 但效率比较低 。。。一上来就new对象,真够饿的
	private Singleton(){}
	
	private static final Singleton Singleton = new Singleton();
	
	public static Singleton getInstance(){
		return Singleton;
	}
	*/
	
	/*
	//2. 懒汉式,非线程安全 。。。等老板来叫了,才去做事,小子真懒
	private Singleton(){}
	
	private static Singleton Singleton = null;
	
	public static Singleton getInstance(){
		if(Singleton==null){
			Singleton = new Singleton();
		}
		return Singleton;
	}
	*/
	
	/*
	//3. 懒汉式,线程安全,但效率很低 。。。99%情况下不需要同步
	private Singleton(){}
	
	private static Singleton Singleton = null;
	
	public static synchronized Singleton getInstance(){	//方法上加synchronized同步
		if(Singleton==null){
			Singleton = new Singleton();
		}
		return Singleton;
	}
	*/	
	
	/*
	//4. 双重校验锁
	private Singleton(){}
	
	//JDK5以后,为避免双重检查锁存在的问题,加入了volatile,是保证变量修改的可见性
	private static volatile Singleton Singleton = null;
	
	public static Singleton getInstance(){
		if(Singleton==null){
			synchronized(Singleton.class){		//加synchronized关键字同步
				if(Singleton==null){
					Singleton = new Singleton();
				}
			}
		}
		return Singleton;
	}
	
	*/
	
	/*
	//5. 静态内部类
	private Singleton(){}
	
	private static class SingletonHolder {
		private static final Singleton singleton = new Singleton();
	}
	
	public static final Singleton getInstance(){
		return SingletonHolder.singleton;
	}
	*/
	
	//6. 枚举
	private static enum EnumSingleton{
        INSTANCE;
		
        private Singleton singleton;
        
        //JVM会保证此方法绝对只调用一次
        private EnumSingleton(){
            singleton = new Singleton();
        }
        
        public Singleton getInstance(){
            return singleton;
        }
    }
	
}


参考:
http://cantellow.iteye.com/blog/838473
http://www.cnblogs.com/yinxiaoqiexuxing/p/5605338.html
http://blog.csdn.net/zhanlanmg/article/details/49944991




  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是30道不同的Java面试题: 1. 什么是Java?它与其他编程语言的区别是什么? 2. 如何创建一个线程?如何避免线程安全问题? 3. 什么是Java虚拟机(JVM)?它有什么作用? 4. 什么是Java堆和Java栈?它们有什么区别? 5. 如何创建一个单例模式? 6. 什么是Java中的反射?它有什么作用? 7. 什么是Java中的多态?它如何实现? 8. 什么是Java中的抽象类?它与接口的区别是什么? 9. 什么是Java中的内部类?它有哪些不同的类型? 10. 什么是Java中的异常?如何处理异常? 11. 什么是Java中的注解?它有什么作用? 12. 什么是Java中的泛型?它有什么作用? 13. 什么是Java中的集合框架?它有哪些不同的类型? 14. 什么是Java中的线程池?它有什么作用? 15. 什么是Java中的锁?它们有哪些不同的类型? 16. 什么是Java中的IO流?它有哪些不同的类型? 17. 什么是Java中的序列化?它有什么作用? 18. 什么是Java中的网络编程?它有哪些不同的协议? 19. 什么是Java中的RPC框架?它有什么作用? 20. 什么是Java中的分布式系统?它有哪些不同的组件? 21. 什么是Java中的ORM框架?它有什么作用? 22. 什么是Java中的AOP框架?它有什么作用? 23. 什么是Java中的Spring框架?它有哪些不同的模块? 24. 什么是Java中的Hibernate框架?它有什么作用? 25. 什么是Java中的MyBatis框架?它有什么作用? 26. 什么是Java中的JPA框架?它有什么作用? 27. 什么是Java中的JDBC框架?它有什么作用? 28. 什么是Java中的JNDI?它有什么作用? 29. 什么是Java中的JMS?它有什么作用? 30. 什么是Java中的RMI?它有什么作用?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值