三种单例,推荐枚举型单例 第一种: <!-- lang: java --> package ch1;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 静态公共final单例
*
*
* @author fck
* @since v0.4.6
* @created 2014年3月11日 下午2:02:18
*/
public class SingletonOne {
public static final SingletonOne INSTANCE = new SingletonOne();
private SingletonOne() {
// 不可由外部调用
// 但是无法防止反射
count = new AtomicInteger(1);
}
private AtomicInteger count = null;
public void sayhi() {
System.out.println(count.getAndIncrement());
}
public static void main(String args[]) {
SingletonOne.INSTANCE.sayhi();
SingletonOne.INSTANCE.sayhi();
SingletonOne.INSTANCE.sayhi();
SingletonOne.INSTANCE.sayhi();
}
}
第二种:
package ch1;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 通过getInstance获取实例的单例
*
*
* @author fck
* @since v0.4.6
* @created 2014年3月11日 下午2:01:56
*/
public class SingletonTwo {
private static final SingletonTwo INSTANCE = new SingletonTwo();
private SingletonTwo() {
// 不可由外部调用
// 但是无法防止反射
count = new AtomicInteger(1);
}
private AtomicInteger count = null;
public void sayhi() {
System.out.println(count.getAndIncrement());
}
public static SingletonTwo getInstance() {
return INSTANCE;
}
public static void main(String[] args) {
SingletonTwo.getInstance().sayhi();
SingletonTwo.getInstance().sayhi();
SingletonTwo.getInstance().sayhi();
SingletonTwo.getInstance().sayhi();
SingletonTwo.getInstance().sayhi();
}
}
第三种:
package ch1;
import java.util.concurrent.atomic.AtomicInteger;
/**
*
*
* 枚举型的单例
*
* @author fck
* @since v0.4.6
* @created 2014年3月11日 下午1:58:24
*/
public enum SingletonEnum {
INSTANCE(1);
private SingletonEnum(int c) {
count = new AtomicInteger(c);
}
private AtomicInteger count = null;
public void sayhi() {
System.out.println(count.getAndIncrement());
}
}
package ch1;
public class RunSingletonEnum {
public static void main(String[] args) {
SingletonEnum.INSTANCE.sayhi();
SingletonEnum.INSTANCE.sayhi();
SingletonEnum.INSTANCE.sayhi();
SingletonEnum.INSTANCE.sayhi();
}
}