单例&多线程

来源:互联网 发布:淘宝上的卖家中心在哪 编辑:程序博客网 时间:2024/04/29 22:59

单例最常见的模式为:懒汉式和饿汉式,懒汉式在调用方法的时候才去实例化对象,饿汉式则是直接实例化对象。在多线程模式中,考虑到性能和线程安全,我们一般选择static inner class或者double check instance的单例模式。在性能提高的同时保证了线程安全


static inner class(静态内部类的形式)

public class Singletion {private static class InnerSingletion {private static Singletion single = new Singletion();}public static Singletion getInstance() {return InnerSingletion.single;}}

懒加载(懒汉模式)(double check instance)

public class DubbleSingleton {private static DubbleSingleton ds;public  static DubbleSingleton getDs(){if(ds == null){try {//模拟初始化对象的准备时间...Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}synchronized (DubbleSingleton.class) {if(ds == null){ds = new DubbleSingleton();}}}return ds;}public static void main(String[] args) {Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println(DubbleSingleton.getDs().hashCode());}},"t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println(DubbleSingleton.getDs().hashCode());}},"t2");Thread t3 = new Thread(new Runnable() {@Overridepublic void run() {System.out.println(DubbleSingleton.getDs().hashCode());}},"t3");t1.start();t2.start();t3.start();}}

打印结果:

128627259012862725901286272590
























0 0
原创粉丝点击