//饿汉式 提前生成了单例对象
class Singleton{
private static final Singleton instance=new Singleton(); private Singleton(){} public static Singleton getInstance(){
return instance;
} } //懒汉式 调用的时候才会生成对象
class Singleton11
{
private static Singleton11 instance;
private Singleton11(){} public static Singleton11 getInstance(){
if (instance==null)
{
instance=new Singleton11();
}
return instance;
}
} //多例模式
class Color
{
private static final Color Red=new Color("红色");
private static final Color Green=new Color("绿色");
private static final Color Blue=new Color("蓝色"); private String color;
private Color(String color){
this.color=color;
} public static Color getInstance(String color){
switch (color)
{
case "红色": return Red;
case "绿色": return Green;
case "蓝色": return Blue;
default: return null; }
} public String print(){
return this.color;
}
} public class TestSingleton{
public static void main(String[] args){
Singleton A=Singleton.getInstance();
Singleton B=Singleton.getInstance();
System.out.println(A==B); Singleton11 A11=Singleton11.getInstance();
Singleton11 B11=Singleton11.getInstance();
System.out.println(A11==B11); Color red=Color.getInstance("红色");
Color green=Color.getInstance("绿色");
Color blue=Color.getInstance("蓝色"); System.out.println(red.print());
System.out.println(green.print());
System.out.println(blue.print());
}
}

多线程的情况:

class Singleton{
private static volatile Singleton instance=null; //直接操作主内存 比操作副本效果好
private Singleton(){
System.out.println(Thread.currentThread().getName()+"******实例化Singleton******");
}
public static Singleton getInstance(){
if (instance==null){
synchronized (Singleton.class){ //此处同步的是new Singleton() 提升多线程效率
if (instance==null){ //此处的判断 对应上面的if (instance==null) 多个线程进来
instance=new Singleton();
}
}
}
return instance;
}
public void print(){
System.out.println("wwww.mldn.com");
}
} public class SingleInstance {
public static void main(String[] args) {
// Singleton s=Singleton.getInstance();
// s.print();
// Singleton ss=Singleton.getInstance();
// ss.print();
// System.out.println(s==ss);
for (int i=0;i<3;i++){
new Thread(()-> System.out.println(Singleton.getInstance()),"单例"+i).start();
}
}
}

java 懒汉式、饿汉式单例模式 不含多线程的情况的更多相关文章

  1. java中的单例模式(懒汉式+饿汉式)

    什么是单例模式: 单例模式既只能在自己本类中创建有且唯一的一个实例(姑且不考虑映射的情况)通过方法将该实例对外公开 第一种:单例模式-懒汉式 既调用getInstance()方法返回实例之前判断有没有 ...

  2. Spring -11 -单例设计模式 -懒汉式/饿汉式(idea默认的)

    单例设计模式 作用: 在应用程序有保证最多只能有一个实例. 好处: 2.1 提升运行效率. 2.2 实现数据共享. 案例:application 对象 懒汉式 3.1 对象只有被调用时才去创建. 3. ...

  3. scala:分别使用懒汉式和饿汉式实现单例模式

    在java中,单例模式需要满足以下要求: 构造方法私有化,使得本类之外的地方不能使用构造方法new出对象 提供私有静态属性,接收单例对象 公共的.静态的getInstance方法,便于外界拿到单例对象 ...

  4. java设计模式单例模式 ----懒汉式与饿汉式的区别

    常用的五种单例模式实现方式 ——主要: 1.饿汉式(线程安全,调用率高,但是,不能延迟加载.) 2.懒汉式(线程安全,调用效率不高,可以延时加载.) ——其他: 1.双重检测锁式(由于JVM底层内部模 ...

  5. JAVA单例模式:懒汉式,饿汉式

    今天复习了一下java的单例模式,写了懒汉式和饿汉式的实现例子.代码如下: 1.懒汉式单例 package com.lf.shejimoshi; /** * @classDesc: 类描述:(懒汉式单 ...

  6. 关于Java单例模式中懒汉式和饿汉式的两种类创建方法

    一. 什么是单例模式 因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计. 二. 单例模式的特点 1. 单例模式只能有一个实例. 2. 单例类必须创建 ...

  7. java基础10 单例模式之饿汉式和懒汉式单例

    前言: 软件行业中有23中设计模式 单例模式    模版模式    装饰者模式    观察者模式    工厂模式    ........... 单例模式 1. 单例模式包括 1.1 饿汉式单例 1.2 ...

  8. Java单例模式--------懒汉式和饿汉式

    单件模式用途:单件模式属于工厂模式的特例,只是它不需要输入参数并且始终返回同一对象的引用.单件模式能够保证某一类型对象在系统中的唯一性,即某类在系统中只有一个实例.它的用途十分广泛,打个比方,我们开发 ...

  9. 牛客网Java刷题知识点之什么是单例模式?解决了什么问题?饿汉式单例(开发时常用)、懒汉式单例(面试时常用)、单例设计模式的内存图解

    不多说,直接上干货! 什么是单例设计模式? 解决的问题:可以保证一个类在内存中的对象唯一性,必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性. 如何保证? 1.不允许其他程序用new ...

随机推荐

  1. [LeetCode] 741. Cherry Pickup 捡樱桃

    In a N x N grid representing a field of cherries, each cell is one of three possible integers. 0 mea ...

  2. redis密码配置

    配置密码 重启密码会失效 配置在redis.conf中 requirepass test123,则重启不会失效

  3. nginx下只能通过域名,禁止使用ip访问

    今天来了一个需求,ip访问返回500,域名访问正常,只需在nginx.conf中添加 server { listen 80 default; #default 必须加的 return 500; } 也 ...

  4. memcached概述与基本操作

    memcached 什么是memcached memcached之前是danga的一个项目,最早是为LiveJournal服务的,当初设计师为了加速LiveJournal访问速度而开发的,后来被很多大 ...

  5. UE4的内存模型

    转自:https://blog.csdn.net/noahzuo/article/details/73565259 UObject和FUObjectItem UE4运行的基本单位是UObjet,然而U ...

  6. IDEA--IDEA debug断点调试技巧

      目录 一.Debug开篇 二.基本用法&快捷键 三.变量查看 四.计算表达式 五.智能步入 六.断点条件设置 七.多线程调试 八.回退断点 九.中断Debug Debug用来追踪代码的运行 ...

  7. 【剑指offer】面试题 8. 二叉树的下一个结点

    面试题 8. 二叉树的下一个结点 NowCoder 题目描述 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指 ...

  8. SpringBoot配置文件敏感信息加密-jasypt

    使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysq ...

  9. JVM之java并发 ——线程安全与锁优化

    概述 人们很难想象现实中的对象在一项工作进行期间,会被不停地中断和切换,对象的属性(数据)可能会在中断期间被修改和变“脏”,而这些事情在计算机世界中则是很正常的事情.有时候,良好的设计原则不得不向现实 ...

  10. 【Qt开发】菜单栏,工具栏和状态栏

    概述 菜单栏,工具栏,状态栏应用中经常见到,下图解释一目了然,实际开发中 两种方式来实现,一种是使用纯代码QMenuBar,QToolBar,QStatusBar来设计开发,另一种使用Qt Desig ...