单例模式
- 整个系统中,无论做怎样的业务操作,保证内存中只有一个对象实例。
单例是一种常见的软件设计模式,其核心思想是一个类只能有一个实例对象,由多个线程来共享该实例对象的资源。
public class Test{
public static void main(String[] args) {
for(int i=0;i<10;i++) {
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Singleton singleton = Singleton.getInstance();
}
}).start();
}
}
}
class Singleton{
private static Singleton instance = null;
private Singleton() {
System.out.println("创建单例对象");
}
public synchronized static Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
package day_4_13;
public class Test {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Singleton singleton = Singleton.getInstance();
}
}).start();
}
}
}
class Singleton {
private volatile static Singleton instance = null;
private Singleton() {
System.out.println("创建了Singleton对象");
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
- 数据是保存在主内存中的,线程在访问该数据时,并不是直接访问主内存中的数据,而是从主内存中拷贝出来一份数据放入工作内存中,线程对工作内存中的数据进行操作,操作完成之后再将工作内存中的数据拷贝到主内存中。
- 使用volatile关键字来解决因 工作内存 -> 到主内存机制 导致可能发生的单例错误。
- 使用volatile关键字修饰的变量,主内存对线程可见。