标签:blog http io ar os 使用 java on div
package com.factory;
/*
* 第一种方式创建单例
*/
class OneSingleton{
private static int number =0; //私有属性
private static OneSingleton instance = new OneSingleton(); //OneSingleton的唯一实例
private OneSingleton(){}
public static OneSingleton getInstance(){
return instance;
}
public synchronized int getNumber(){ //synchronized关键字表示方法是线程同步
return number; //任一时刻最多只能有一个线程进入该方法
}
public synchronized int nextNumber(){
return number++;
}
}
/*
* 第二种创建单例方法
*/
class TwoSingleton{
private static int number =0;
private static TwoSingleton instance = null;
private TwoSingleton(){}
public static synchronized TwoSingleton getInstance(){
if(instance == null){
instance = new TwoSingleton();
}
return instance;
}
public synchronized int getNumber(){
return number;
}
public synchronized int nextNumber(){
return number++;
}
}
/**
* @function 单例模式
* @author JarCode
* 技术要点:
* 单例模式有两种实现方式:
* >>一种是将类的 构造方法私有化,用一个私有的类变量instance保存类的实例,
*在加载类时,创建类的实例,改方法直接返回instance.
* >>另一种是将类的 构造方法私有化,用一个私有的类变量instance保存类的实例,
*在加载类时,将null赋给instance,再提供一个公有的静态方法getInstance
* ,用于获取类的唯一实例,该方法首先判断instance是否为null,
*如果为null,则创建实例对象,否则返回instance。
*
* 两种方式的区别:
* >>前者被加载时,类的唯一实例被创建,后者在第一次调用getInstance()方法时,类的唯一实例被创建,但需要在getInstance()方法中使用synchronized
* 关键字,保证某一时刻只有一个线程调用此方法。
*
*/
public class TestSingleton {
public static void main(String[] args) {
OneSingleton one1 = OneSingleton.getInstance();
OneSingleton one2 = OneSingleton.getInstance();
System.out.println("用onsingleton实现单例模式");
System.out.println("调用nextnumber()方法之前:");
System.out.println("one1.number="+one1.getNumber());
System.out.println("one2.number="+one2.getNumber());
one1.nextNumber();
System.out.println("调用nextnumber()方法后:");
System.out.println("one1.number"+one1.getNumber());
System.out.println("one2.number"+one2.getNumber());
TwoSingleton two1 = TwoSingleton.getInstance();
TwoSingleton two2 = TwoSingleton.getInstance();
System.out.println("用twosingleton实现单例模式");
System.out.println("抵用nextnumber方法之前:");
System.out.println("two1.number="+two1.getNumber());
System.out.println("two2.number="+two2.getNumber());
two1.nextNumber();
System.out.println("调用nextnumber方法后:");
System.out.println("two1.number="+two1.getNumber());
System.out.println("two2.number="+two2.getNumber());
}
}
标签:blog http io ar os 使用 java on div
原文地址:http://www.cnblogs.com/zh-bo/p/4110034.html