线程安全
- 线程:一个应用程序称为一个进程由多个线程组成(计算机是单线程,同一时间只能做一件事,为什么能用多线程就是因为他能快速的切换)
线程安全:饿汉式本身就事线程安全的,可以直接用于多线程而不会出现问题;public class Singleton1 {
private Singleton1() {}
private static final Singleton1 singleton=new Singleton1();
public static Singleton1 getInstance() {
return singleton;}
}
- 懒汉模式是不安全的,解决方式如下:
- 关键字:synchronized:可以用来给对象和方法或者代码块加锁,当他锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这个代码块
- 使用双重检测机制实现线程安全的懒汉式public class Singleton {
//懒汉式单列类。在第一次调用的时候实例化自己
private Singleton() {}
private static Singleton singleton=null;//一个类只有一份
//静态工厂方法
public static Singleton getInstance() {
if (singleton==null) {
synchronized (Singleton .class ) {//为了躲避线程的速度
if (singleton==null) {
singleton=new Singleton();
}
}
}
return singleton;
}
}
- 使用静态的内部类实现线程的安全单列模式public class MySingleton {
//内部类
private static class MySingletonHandler{
private static MySingleton instance= new MySingleton();
}
private MySingleton() {}
public static MySingleton getInstance() {
return MySingletonHandler.instance;
}
}