Java懒汉式设计模式与多线程
2015-07-21 15:10
363 查看
懒汉式单例设计模式:
public class Single { private static Single single = null; private Single() { } public static Single getInstance() { if (single==null) { single=new Single(); } return single; } }懒汉式单例设计模式在多线程访问时就会产生安全隐患(不能保证该类内存的唯一性)。
解决方法一:
public class Single { private static Single single = null; private Single() { } public static synchronized Single getInstance() { if (single==null) { single=new Single(); } return single; } }但是这种方法也有一个缺点,即当访问该实例的线程比较多时,那么每个线程想要获取实例就都会判断synchronized,所以,这样就会比较低效。
解决方法二:
public class Single { private static Single single = null; private Single() { } public static Single getInstance() { if (single == null) { synchronized (Single.class) { if (single == null) { single = new Single(); } } } return single; } }这样既可以解决多线程访问问题,又可以避免方法一的低效缺点,减少了判断synchronized次数。
常见面试题:
1.懒汉式和饿汉式有什么不同?
答:懒汉式的特点在于实例的延迟加载。2.懒汉式的延迟加载有没有问题?
答:遇到多线程访问时会出现安全问题。3.如何解决该问题?
答:可以增加同步来解决。4.增加同步的方式?
答:用同步方法或同步代码块都可以,但是同步方法稍微有点低效。5.增加同步时,使用的锁是哪一个?
答:该类所属的字节码文件对象。相关文章推荐
- java annotation+反射的应用记录
- Java基础—socket—UDP---chatDemo
- Struts 简介
- JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解
- Java中遍历文件夹的2种方法
- Java读写Windows共享文件夹
- Java---并发和同步(生产者--消费者)
- try catch异常后,spring的异常是否还有效
- spring <context:property-placeholder/> 配置详解
- 自定义SpringMVC配置文件名称以及路径
- 重学java23种设计模式(1)工厂方法模式
- 关于java.sql.PreparedStatement和com.mysql.jdbc.PreparedStatement的区别
- 多次编辑xml文件后,eclipse内存溢出异常崩溃
- myeclipse自定义注释快捷键
- Java实现数据库连接池的方法
- Java图形界面事件监听处理之四种方法
- Myeclipse的Launching JMSSink(Time of error:October 17,2009 7:22:05 PM GMT+08:00) Reason:Check the det
- java.security.NoSuchProviderException: no such provider: BC 的问题解决
- Java web开发编码设置
- maven报错 错误: 程序包javax.servlet不存在