Android-Java单例模式
今天我们来说说一个非常常用的模式,单例模式,单例模式让某个类中有自己的实例,而且只实例化一次,避免重复实例化,单例模式让某个类提供了全局唯一访问点,如果某个类被其他对象频繁使用,就可以考虑单例模式,以下用代码来分析:
饿汉式单例模式举例:
- /*
- * 饿汉式单例模式
- * 饿汉式的这种单例模式是线程安全的
- * 需要根据业务需求来觉得要不要使用饿汉式单例模式
- */
- public class SingletonHungry {
- /*
- * 直接以变量的形式实例化了当前对象,并进行了私有化,(这种方式的话在不管被不被使用,就已经实例化)
- */
- private static SingletonHungry singletonHungry = new SingletonHungry();
- public static SingletonHungry getInstance() {
- return singletonHungry;
- }
- public void printlnMethod() {
- System.out.println("线程安全的饿汉式单例模式...");
- }
- }
懒汉式单例模式
- // 懒汉式单例模式
- // 懒汉式的这种单例模式是线程不安全的,因为多线程并发性调用就会引发线程不安全问题
- // 需要根据业务需求来觉得要不要使用懒汉式单例模式
- public class SingletonLazy {
- /*
- * 首先申明一个对象变量,变量都是必须私有化
- */
- private static SingletonLazy singletonLazy = null;
- public static SingletonLazy getInstance() {
- if (null == singletonLazy) {
- singletonLazy = new SingletonLazy();
- }
- return singletonLazy;
- }
- public void printlnMethod() {
- System.out.println("懒汉式单例模式,线程不安全的,因为多线程并发调用会导致线程不安全");
- }
- }
以上的懒汉式单例模式,有不足之处,所以以下这个案例就是解决多线程并发调用引发的不安全问题:
- /*
- * 之前提到的懒汉式单例模式,存在多线程并发调用引发线程不安全问题,现在就增加同步来解决这个问题
- */
- public class SingletonUpdate {
- private static SingletonUpdate singletonUpdate = null;
- public static SingletonUpdate getInstance() {
- if (null == singletonUpdate) {
- synchronized (SingletonUpdate.class) {
- if (null == singletonUpdate) {
- singletonUpdate = new SingletonUpdate();
- }
- }
- }
- return singletonUpdate;
- }
- public void printlnMethod() {
- System.out.println("懒汉式单例模式,线程不安全的,因为多线程并发调用会导致线程不安全
- 这个是Update升级版....");
- }
关于线程的安全问题,对于为什么会出现安全问题,可以看Android-多线程安全问题-synchronized,博客
测试程序:
- // 测试程序
- public class Main {
- public static void main(String[] args) {
- SingletonHungry.getInstance().printlnMethod();
- SingletonLazy.getInstance().printlnMethod();
- SingletonUpdate.getInstance().printlnMethod();
- }
- }
运行结果:
静态内部类 单例模式:
- package android.java.thread13;
- /*
- * 内部静态类 单例模式
- */
- class SingletonState {
- private SingletonState() {}
- private static class SingletonClass {
- public static SingletonState singletonState = new SingletonState();
- }
- public static SingletonState getNewInstance() {
- return SingletonClass.singletonState;
- }
- public void printlnMethod() {
- System.out.println("内部静态类 单例模式...");
- }
- }
使用 静态内部类 单例模式:
- package android.java.thread13;
- /**
- * 使用内部静态类 单例模式
- */
- public class Main {
- public static void main(String[] args) {
- // new SingletonState(); // 会报错 ❌
- // new SingletonState(参数); // 会报错 ❌
- // 实例化 内部静态类 单例模式
- SingletonState singletonState = SingletonState.getNewInstance();
- singletonState.printlnMethod();
- }
- }
打印:
Android-Java单例模式的更多相关文章
- android java 设计模式详解 Demo
android java 设计模式详解 最近看了一篇设计模式的文章,深得体会,在此基础我将每种设计模式的案例都写成Demo的形式,方便读者研究学习, 首先先将文章分享给大家: 设计模式(Design ...
- 单例模式:Java单例模式的几种写法及它们的优缺点
总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton( ...
- 用java单例模式实现面板切换
1.首先介绍一下什么是单例模式: java单例模式是一种常见的设计模式,那么我们先看看懒汉模式: public class Singleton_ { //设为私有方法,防止被外部类引用或实例 priv ...
- .NET/android/java/iOS AES通用加密解密(修正安卓)
移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都 ...
- Android java传递int类型数组给C
接着前面的文章<Android java传递int类型数据给C><Android java传递string类型数据给C>,继续实践 实现public native int[] ...
- Android java传递string类型数据给C
本文接着实现<Android java传递int类型数据给C>的还未实现的方法: public native String sayHelloInC(String s); 先贴一个工具方法, ...
- .NET/android/java/iOS AES通用加密解密
移动端越来越火了,我们在开发过程中,总会碰到要和移动端打交道的场景,比如.NET和android或者iOS的打交道.为了让数据交互更安全,我们需要对数据进行加密传输.今天研究了一下,把几种语言的加密都 ...
- android Java BASE64编码和解码二:图片的编码和解码
1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.a ...
- 【深入】java 单例模式(转)
[深入]java 单例模式 关于单例模式的文章,其实网上早就已经泛滥了.但一个小小的单例,里面却是有着许多的变化.网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便 ...
- CC++初学者编程教程(10) 搭建Android java C/C++ NDK QTforAndroid 开发环境
1 安装JDK 2 点下一步 3 点下一步 4 开始安装 5 定制路径,点下一步 6 开始安装 7 安装完成, 8 解压缩 9 启动eclipse 10 看到启动画面 11 设置工作文件夹 12 单击 ...
随机推荐
- Python 反射机制
Python的反射机制 Python的反射机制,就是反射就是通过字符串的形式,导入模块:通过字符串的形式,去模块寻找指定函数,并执行.利用字符串的形式去对象(模块)中操作(查找/获取/删除/添加)成员 ...
- python常用命令
安装sudo easy_install pip 列出已安装的包pip freeze or pip list 导出requirements.txtpip freeze > <目录>/r ...
- Sophus libSophus.so
在编译包含Sophus的源文件的时候,出现如下错误 ../lib/libmyslam.so: undefined reference to `Sophus::SO3::SO3(double, doub ...
- springMVC学习二 原始springMVC环境搭建
第一步:导入jar包 第二步:配置DispatcherServlet DispatcherServlet本质是一个Servlet,在spring-webmvc包中,在servlet2.5之前 spr ...
- JavaScript函数和内置对象
一.函数 function f1(){ console.log("666"); } f1(); //调用函数 1.普通函数定义 function f1(a,b){ console. ...
- 2018.11.06 bzoj1093: [ZJOI2007]最大半连通子图(缩点+拓扑排序)
传送门 先将原图缩点,缩掉之后的点权就是连通块大小. 然后用拓扑排序统计最长链数就行了. 自己yyyyyy了一下一个好一点的统计方法. 把所有缩了之后的点都连向一个虚点. 然后再跑拓扑,这样最后虚点的 ...
- TCP/IP协议(1):各层协议帧格式
一. 1.OSI与TCP/IP对应: TCP/IP各层功能: 链路层:包括操作系统的设备驱动程序和计算机的网卡,提供底层传输服务. 网络层:为数据选择路由,在众多计算机和网络设备组成的网络中选择一 ...
- java socket之多人聊天室Demo
一.功能介绍 该功能实现了一个类似QQ的最简单多人聊天室,如下图所示. 二.目录结构 三.服务端 1)SocketServer类,该类是服务端的主类,主要负责创建聊天窗口,创建监听客户端的线程: pa ...
- CString int转换
1.CString 转 int CString strtemp = "100"; int intResult; intResult= atoi(strtem ...
- w7 目录
第17章 期中架构体系介绍 期中架构环境准备 01-期中架构内容简介 02-期中架构大酒楼详解 03-期中架构使用到的软件简介 04-期中架构运维角度观察与使用的软件 05-重头开始创建一台新的虚拟机 ...