2016/11/17

1.单例设计模式

(1)懒汉模式

 1 public class Singleton {
 2
 3     private Singleton() {}
 4     private static Singleton singleton = null;
 5    // 这里可以加同步锁解决线程安全问题  
 6     public static Singleton getInstance() {
 7         if(singleton == null) {
 8             singleton = new Singleton();
 9         }
10         return singleton;
11     }
12 }

(2)饿汉模式

 1 public class Singleton2 {
 2
 3     public Singleton2() {
 4     }
 5     private static final Singleton2 singleton2 = new Singleton2;
 6
 7     public static Singleton2 getInstance(){
 8         return singleton2;
 9     }
10 }

懒、饿汉之间的比较

(1)加载时机

  懒汉:懒汉很懒,只有当调用getInstance()方法时,才会初始化这个实例类

  饿汉:饿汉很饥饿,类一旦加载,实例就初始化完成,保证在调用getInstance()方法时,单利是已经存在的

(2)线程安全性

  懒汉:线程不安全.并发环境下很可能出现多个Singleton实例.解决办法是可以添加同步锁

  饿汉:饿汉式天生就是线程安全的,可以直接用于多线程而不会出现问题

(3) 资源加载和性能:

  懒汉:延迟加载,第一次调用时才会初始化,性能上会有所延迟.

  饿汉:类创建的同时就实例化一个静态对象,不论之后是否用到这个对象,都已初始化并占用一定的内存.第一次调用个时候相对较快.

(4)  懒汉设计模式线程安全问题的解决方案

利用了classloader的机制来保证初始化instance时只有一个线程,所以也是线程安全的,同时没有性能损耗

 1 public class SafeSingleton {
 2
 3     public SafeSingleton() {
 4     }
 5     private static class LasyHolder{
 6         private static final SafeSingleton INSTANCE = new SafeSingleton();
 7     }
 8
 9     public static final SafeSingleton getInstance(){
10         return LasyHolder.INSTANCE;
11     }
12 }
时间: 2024-08-05 11:56:49

2016/11/17的相关文章

2016.11.17作业

附加作业: 1 #include<stdio.h> int main() { int a,b,c,d; double sum,p; printf("Input 4 number:"); scanf("%d%d%d%d",&a,&b,&c,&d); sum=a+b+c+d; p=sum/4; printf("和=%.lf 平均值=%.1f",sum,p); return 0; } 2 #include&l

每周进度及工作量统计——2016.11.24-2016.11.30

项目:连连看游戏 项目类型:四人小组项目 小组名称:天天向上 小组成员:王森.张政,张金生,栾骄阳 项目改进:final版本研发和维护 项目预期时间:2016.9.10-2016.12.8 2016.11.26-2016.11.27 C类别 C内容 S开始时间 E结束时间 I间隔 T净时间 P预计时间 分析 讨论  13:24  13:43  0  19  20   设计  13:43  14:04  0  21  30 编码 功能优化  14:46  16:51  26  99  120 文档

2015.11.17 新起点,出发。

今天注册了博客,要开始认真仔细的学习前端技术了.这个博客将作为我学习进度记录.学习笔记整理.心得体会整理等书写记录的工具. —希望苍天不负有心人 2015.11.17

2016.11.18多态

下列语句哪一个将引起编译错误?为什么?哪一个会引起运行时错误?为什么? m=d; d=m; d=(Dog)m; d=c; c=(Cat)m; 结论: java中基类对象不能当做子类对象使用,需要用强制转换来实现,子类对象变量=(子类名)基类对象名:错误的代码是d=m; d=c; 1.   左边的程序运行结果是什么?2.   你如何解释会得到这样的输出?3.   计算机是不会出错的,之所以得到这样的运行结果也是有原因的,那么从这些运行结果中,你能总结出Java的哪些语法特性? 运行结果截图: pu

11.14/11.15 Apache和PHP结合 11.16/11.17 Apache默认虚拟主机

11.14/11.15 Apache和PHP结合 编辑:httpd主配置文件/usr/local/apache2.4/conf/httpd.conf 去掉#号 将php7加# Telnet IP+80 端口不通,需要开启iptables防火墙 更改require 更改配置后需要操作才能生效 重新加载服务 增加一行php进行解析 页面显示 结果访问的是源代码 如果遇到php无法解析,需要检查相关的apache的配置文件 (1)检查apache的php 有没有加载php5 查看是否有libphp5.

每周进度及工作量统计——2016.11.10-2016.11.16

项目:连连看游戏 项目类型:四人小组项目 小组名称:天天向上 小组成员:王森.张政,张金生,栾骄阳 项目改进:beta阶段结束,进入总结个final版本研发和维护 项目预期时间:2016.9.10-2016.11.24 C类别 C内容 S开始时间 E结束时间 I间隔 T净时间 P预计时间 分析 讨论  13:44  14:01  0  17  20   设计  14:01  14:16  0  15  40 编码 功能优化  14:16  16:47  12  139  120 文档 程序说明

2016/1/18 更正补充 2016/1/17 矩形面积 1,构造方法初始化 长和宽 ,2, 定义成员方法求矩形面积

1 package caipiao; 2 3 import java.util.*; //引入java工具.util是utiliy的缩写,意为多用途的, 4 // 工具性质的包 这个包中主要存放了:集合类(如ArrayList,HashMap等), 5 //随机数产生类,属性文件读取类,定时器类等类. 6 public class JuXing1 {//这些类极大方便了Java编程,日常java编程中,经常要用到这些类. 7 //属性 8 private double chang; //私有化

ACM-南京理工大学第八届程序设计竞赛-网络赛(2016.04.17)

A.偷吃糖果Time Limit: 1000Ms Memory Limit: 65536KB Description小鱼喜欢吃糖果.他有两盒糖果,两盒糖果分别仅由小写字母组成的字符串s和字符串t构成.其中'a'到'z'表示具体的某种糖果类别.他原本打算送给他喜欢的女生,但是要送给女孩子的话两盒糖果不能有差别(即字符串s和t完全相同).所以,他决定偷吃几块,他吃糖果的策略是每次选出一盒糖果中两个连续的同种类别的糖果,然后吃掉其中一块.该策略可以使用多次.例如一盒糖果是'rrrjj',他可以把这盒糖

2015.11.17

CommonJS CommonJs是服务器端模块的规范,Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的exports对象. 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 // foobar.js //私有变量 var test = 123; //公有方法 function foobar () {     this.foo =