java学习笔记_单例模型
2013-11-03 19:04
183 查看
/*单例模型:保证该类中的对象的唯一性
* 1.建立私有静态对象
* 2.不让其他类建立该类对象
* 3.对外提供对对象
*/
class
Singer{
private static Singer s=new Singer();
private Singer(){}
public static Singer GetSinger(){
return s;
}
//以上是饿汉式单例模型
private int age;
public void SetAge(int age){
this.age = age;
}
public int GetAge(){
return age;
}
}
public class SingerDemo {
public static void main(String[] args){
Singer s1=Singer.GetSinger();
s1.SetAge(32);
System.out.println(s1.GetAge());
}
}
懒汉式
class Singer{
private static Singer s=null;
private Singer(){}
public static Singer GetSinger(){
if (s==null)
s=new Singer();
return s;
}
//以上是懒汉式
public int age;
public void SetAge(int age){
this.age = age;
}
public int GetAge()
{
return age;
}
}
饿汉式比懒汉式在开发用得多
第一,饿汉式在加载类是就加载对象,懒汉式在加载类时对象为空,需要时加载。但是一般用到此方法是都是有对象的。
第二,懒汉式存在安全隐患,当多线程同时访问调用该类是会出现多个对象的可能,需要加入关键字(加锁)synchronized(保证同时),但是加入此关键字会使程序调用变慢。
* 1.建立私有静态对象
* 2.不让其他类建立该类对象
* 3.对外提供对对象
*/
class
Singer{
private static Singer s=new Singer();
private Singer(){}
public static Singer GetSinger(){
return s;
}
//以上是饿汉式单例模型
private int age;
public void SetAge(int age){
this.age = age;
}
public int GetAge(){
return age;
}
}
public class SingerDemo {
public static void main(String[] args){
Singer s1=Singer.GetSinger();
s1.SetAge(32);
System.out.println(s1.GetAge());
}
}
懒汉式
class Singer{
private static Singer s=null;
private Singer(){}
public static Singer GetSinger(){
if (s==null)
s=new Singer();
return s;
}
//以上是懒汉式
public int age;
public void SetAge(int age){
this.age = age;
}
public int GetAge()
{
return age;
}
}
饿汉式比懒汉式在开发用得多
第一,饿汉式在加载类是就加载对象,懒汉式在加载类时对象为空,需要时加载。但是一般用到此方法是都是有对象的。
第二,懒汉式存在安全隐患,当多线程同时访问调用该类是会出现多个对象的可能,需要加入关键字(加锁)synchronized(保证同时),但是加入此关键字会使程序调用变慢。
相关文章推荐
- JAVA学习笔记--4.多线程编程 part1.背景知识和内存模型
- [学习笔记]Java面向对象思想和内存模型
- JAVA学习笔记之流,序列化,Socket和装饰者模型
- JAVA(学习笔记1.2)——事件处理模型
- Java补完之类加载机制(双亲委派模型)学习笔记
- JAVA学习笔记(四十二)-生产者消费者模型
- java虚拟机学习笔记——java安全模型
- JAVA学习笔记4---两种基础编程模型、JAVA库、类的成员
- Java学习笔记(57)------------NIO:浅析I/O模型
- java高并发程序设计学习笔记三内存模型线程安全
- 【Java学习笔记】JVM内存模型
- java学习笔记之内存模型
- 学习笔记2:java 1.8 lamdba 表达式在android中的运用
- 【Java】Java学习笔记-基础语法
- Java IO学习笔记一
- Java23种设计模式学习笔记【目录总贴】
- Java学习笔记(八、数据库编程基础)
- 【Java没基础】I/O学习笔记(二)-NIO
- java基础语法学习笔记(三)
- 黑马程序员 JAVA基础--关键字,标识符,运算符,二进制的转换的学习笔记