2018-04-19 13:35:04 499浏览
单例模式是最常用的设计模式之一,目的是保证一个类只有一个实例。
在项目中的作用:
classHunger{
//静态的实例
privatestaticHungerhunger=newHunger();
//隐藏构造方法
privateHunger(){}
//返回静态实例
publicstaticHungergetInstance(){
returnhunger;
}
}
publicclassLazySingleton{
//静态的实例
privatestaticLazySingletonsingle=null;
//隐藏构造方法
privateLazySingleton(){
System.out.println("创建LazySingleton对象");
}
//返回静态实例
publicstaticLazySingletongetInstance(){
if(single==null){
single=newLazySingleton();
}
returnsingle;
}
}
for(inti=0;i<100;i++){
newThread(newRunnable(){
@Override
publicvoidrun(){
System.out.println(LazySingleton.getInstance());
}}).start();
}
publicstaticsynchronizedLazySingletongetInstance(){
if(single==null){
single=newLazySingleton();
}
returnsingle;
}
执行刚才多线程的代码后,我们发现可以解决同步问题,但是同步方法存在的问题是每个线程进入后都会加锁,执行效率低。publicstaticLazySingletongetInstance(){
if(single==null){
synchronized(LazySingleton.class){
single=newLazySingleton();
}
}
returnsingle;
}
publicstaticLazySingletongetInstance(){
//外层的if主要作用是判断是否需要执行同步块,提高性能
if(single==null){
//静态方法中将类作为锁
synchronized(LazySingleton.class){
//判断对象是否为空,为空就创建对象
if(single==null){
single=newLazySingleton();
}
}
}
returnsingle;
}
classMySingleton{
privateMySingleton(){
}
privatestaticclassSingletonHelp{
staticMySingletoninstance=newMySingleton();
}
publicstaticMySingletongetInstance(){
returnSingletonHelp.instance;
}
}
【关注微信公众号获取更多学习资料】