Android开发:Java单例创建的饿汉式、懒汉式及双重检查锁定实现全解析
在Android开发中,我们可以使用以下两种方式来创建Java的单例: 1. 饿汉式单例: ```java public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` 在上述代码中,Singleton的实例在类加载时就被创建了,因此也称为饿汉式单例。这种方式的优点是线程安全,但是缺点是浪费内存,因为即使在程序中不需要Singleton的时候,Singleton的实例也会一直存在。 2. 懒汉式单例: ```java public class Singleton { private static Singleton instance; private Singleton() {} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } ``` 在上述代码中,Singleton的实例只有在第一次被请求时才会被创建,因此也称为懒汉式单例。这种方式的优点是可以节省内存,但是缺点是线程不安全,因为如果有多个线程同时请求Singleton的实例,可能会创建多个Singleton的实例。 为了使懒汉式单例线程安全,我们可以使用双重检查锁定(Double-Checked Locking)的方式: ```java public class Singleton { private static volatile Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } ``` 在上述代码中,我们首先检查Singleton的实例是否为空,如果为空,再进行同步操作,这样就可以保证在多线程环境下的线程安全了。 ######[AI写代码神器 | 368点数解答 | 2023-11-07 22:49:11]
- RealtimeMonitoringFragment 代码片段:Android 实时监控功能核心代码剖析(字节豆包 | 30点数解答 | 2024-10-12 10:31:18)294
- 揭秘:Android实时监控片段(RealTimeMonitoringFragment)代码实现(GPT | 531点数解答 | 2024-10-12 10:32:25)269
- AIDE编写Xposed软件:参考代码教你拦截Smail类方法名(阿里通义 | 649点数解答 | 2024-10-12 00:15:48)305
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)407
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)309
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1143
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)345
- Java 创建 HTTP POST 请求实现文件上传:代码示例与注意要点 (字节豆包 | 300点数解答 | 2024-12-06 16:07:20)338
- 智能电话窗口按钮1弹起:获取坐标与手机IMEI码待处理(GPT | 208点数解答 | 2024-09-12 16:36:31)353
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)278
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)308
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)313