设计模式之单例模式
2016-07-04 01:52
302 查看
单例模式的定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
具体代码实现:
其中构造方法私有化是为了限制产生多个对象;
里面的静态方法是为了获取唯一的实例对象;
注意问题在多个线程同时执行的时候,如
new Thread(){
public void run() {
Student stu = Student.getInstance("abc");
};
}.start();
new Thread(){
public void run() {
Student stu1 = Student.getInstance("abc");
};
}.start();因为对象的初始化话需要时间在进行if(stu==null)判断时候俩个线程可能同时判断为真继续运行下去,此时在内存中就回有两个对象了,因此在线程方法前加synchronized 关键字来解决线程不安全因素(饿汉式)。
具体代码实现:
package SingleObjectModel; /** * 单例模式 * @author minGe_000 * */ public class Student { public String name; //1.构造方法私有化 private Student(){} private Student(String name){ this.name = name; } //2.提供唯一的对象 private static Student stu; //3.提供一个get实例的函数 public static synchronized Student getInstance(String n){ if(stu==null){ stu = new Student(n); } return stu; } }
其中构造方法私有化是为了限制产生多个对象;
里面的静态方法是为了获取唯一的实例对象;
注意问题在多个线程同时执行的时候,如
new Thread(){
public void run() {
Student stu = Student.getInstance("abc");
};
}.start();
new Thread(){
public void run() {
Student stu1 = Student.getInstance("abc");
};
}.start();因为对象的初始化话需要时间在进行if(stu==null)判断时候俩个线程可能同时判断为真继续运行下去,此时在内存中就回有两个对象了,因此在线程方法前加synchronized 关键字来解决线程不安全因素(饿汉式)。
相关文章推荐
- 关于连接myEclipse连接mysql时出现 Table 'performance_schema.session_variables' doesn't exist错误解决方法
- MATLAB图像处理基础
- 机器视觉开源处理库汇总
- MATLAB图像处理基础
- 机器视觉开源处理库汇总
- PHP GET参数中文乱码解决
- 《Java数据结构与算法》笔记-CH5-链表-9实现带迭代器的链表
- 设计模式-适配器模式
- AOP面向切面编程
- 推荐!国外程序员整理的机器学习资源大全
- 推荐!国外程序员整理的机器学习资源大全
- AOP面向切面编程
- 机器学习常见算法分类汇总
- 机器学习常见算法分类汇总
- 经典的机器学习方面源代码库
- redis windows下的环境搭建
- 经典的机器学习方面源代码库
- solr4.8单机部署(solr4.8+tomcat7)
- 对线程池的理解
- 论文笔记-Augmented Lagrange Multiplier Method for Recovery of Low-Rank Matrices