spring中bean的单例bean不是单例模式
bean的单例不是单例模式。
userService类型的bean可以有多个,单例bean是指name叫userService的bean只有一个。
而单例模式,假如userService类是单例模式,那么用userService创建的对象就只有一个。这才叫单例模式。不然就不叫单例模式了。是为了防止创建多个对象造成的性能开销,所以限制只能创建一个对象。比如mysql的连接对象。每次访问时不可能创建新的对象,占用新的数据库连接。都是复用的同一个对象。

双检锁:实现单例模式
第一个判空是为了不让多线程直接竞争锁,先判空再竞争锁为了效率。
加锁
第二次判空,因为线程A结束时有可能被等待的线程直接获取锁然后创建对象,造成重复创建对象。所以要第二次判空。
指令重排volatile


浙公网安备 33010602011771号