有些场景,我们只有一个对象,那么这个时候我们就要用到单例模式。单例模式是在被用到的时候才会被创建,不 用的时候不会,比较节省系统资源
系统中只有一个对象
Windowsa操作系统的任务
1 只要构造函数是私有的,就不能被外面的类多次创建对象
2 因为是私有的构造函数,那么就需要在类的内部创建这个对象
3 这样就需要对外提供一个静态方法,从而才能够调用此对象
public class Confucius {
private static Confucius confucius;
private Confucius(){
}
public static Confucius getConfucius(){
if(confucius==null)
{
confucius=new Confucius();
}
return confucius;
}
}
【单例模式的线程安全问题】
上面的单例存在线程安全的问题,启动四个线程,就会出现多个Confucius如图
public class TestConfucius {
public static void main(String args[]) {
Thread t1= new Thread(){
public void run(){
System.out.println(Confucius.getConfucius());
}
};
Thread t2= new Thread(){
public void run(){
System.out.println(Confucius.getConfucius());
}
};
Thread t3= new Thread(){
public void run(){
System.out.println(Confucius.getConfucius());
}
};
Thread t4= new Thread(){
public void run(){
System.out.println(Confucius.getConfucius());
}
};
t1.start();
t2.start();
t3.start();
t4.start();
}
}
如何解决线程安全问题
方法1:使用饿汉模式
方法2:加synchronize 关键字
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。