单例设计

xiaoxiao2024-04-13  22

单例相关比较: 第一种方式:预先加载的问题,可能在没有手动创建对象的时候已经实例化了变量 private final static UserService userService = new UserService(); private UserService() { } public static final UserService getInstance() { return userService; } 第二种方式:排队现象比较严重,会出现性能问题 private static UserService userService = null; private UserService() { } public static synchronized UserService getInstance() { if(userService == null) { userService = new UserService(); } return userService; } 第三种方式:容易造成创建多个对象的问题,特别第一创建对象的时候,另外一个线程 已经进入if(userService == null)等候synchronized, 执行完毕,然后会创建第二个实例,单例失效 private static UserService userService = null; private UserService() { } public static UserService getInstance() { if(userService == null) { synchronized(UserService.class) { userService = new UserService(); } } return userService; } 第四种方式:避免了第三种创建多个实例的现象,并且避免了多个线程排队等候的现象(比较推荐使用) private static UserService userService = null; private UserService() { } public static UserService getInstance() { if(userService == null) { synchronized(UserService.class) { if(userService == null) userService = new UserService(); } } return userService; }
转载请注明原文地址: https://www.6miu.com/read-5014954.html

最新回复(0)