- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章图文结合讲解Java单例模式由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
ps:首先我们要先知道什么是单例,为什么要用单例,用的好处是什么等问题来看.
1:java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例、饿汉式单例 。
单例模式有以下特点:
1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例.
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个printer spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头.
2:懒汉式 。
先把单例类写出来 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public
class
singletontest {
//懒汉式单例类.在第一次调用的时候实例化自己
private
singletontest() {}
private
static
singletontest single=
null
;
//静态工厂方法
public
static
singletontest getinstance() {
if
(single ==
null
) {
single =
new
singletontest();
system.out.println(
"创建一次"
);
}
return
single;
}
public
void
show(){
system.out.println(
"我是show"
);
}
}
|
这里直接上代码,代码中有详解 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public
class
singletontest2 {
public
static
void
main(string[] args) {
// todo auto-generated method stub
//故意写获取两次,创建两个对象
singletontest singleton=singletontest.getinstance();
singletontest singleton2=singletontest.getinstance();
//singleton对象只创建一次,但是写两次还是可以的,而且方法都是可以调用的,但是看下面
singleton.show();
singleton2.show();
//两个对象的表现形式一样
if
(singleton == singleton2){
system.out.println(
"该对象的字符串表示形式:"
);
system.out.println(
"singleton :"
+singleton.tostring());
system.out.println(
"singleton2:"
+singleton2.tostring());
}
|
由上面的图可以看出就算多创建几个对象,在底部也是只有一个singleton对象实例,而且创建出来的对象的字符串表现形式也是一样的,有的人肯定有疑问,那平常两个对象是什么样子的呢,我下面给你解释说明,在这之前我写说一下这个懒汉式需要注意的地方,它是线程不安全的,并发环境下很可能出现多个singleton实例,有很多方法可以解决,比如说同步锁,静态内部类等,这里主要说静态内部类,这个比较好点, 。
1
2
3
4
5
6
7
8
9
10
|
public
class
singleton3 {
private
static
class
singletonholder {
private
static
final
singleton3 instance =
new
singleton3();
}
private
singleton3 (){}
public
static
final
singleton3 getinstance() {
system.out.println(
"singleton创建"
);
return
singletonholder.instance;
}
}
|
调用:
1
2
3
4
5
6
7
|
singleton3 singleton3=singleton3.getinstance();
singleton3 singleton4=singleton3.getinstance();
if
(singleton3 == singleton4){
system.out.println(
"该对象的字符串表示形式:"
);
system.out.println(
"singleton3:"
+singleton3.tostring());
system.out.println(
"singleton4:"
+singleton4.tostring());
}
|
结果图:
这里我也是创建了两个对象来说明,神奇的是打印了两次singleton创建,这难道是又创建成功了的对象吗?答案是:虽然打印了两次,对象名也有两个,但是该对象的字符串表示形式还是一样的,而且大家都知道static的用法,就是在类被加载的同时该singleton对象就已经被创建,后期不会再被创建,就算后期自己又调用了getinstance()方法,但底层还是公用的一个singleton对象. 。
同样,我写了一个普通的类,来同时创建两个对象,并且打印他们的tostring()方法,如下:
1
2
3
4
5
6
7
8
9
10
11
|
qubie qb1=
new
qubie();
qubie qb2=
new
qubie();
if
(qb1 == qb2){
system.out.println(
"该对象的字符串表示形式:"
);
system.out.println(
"singleton3:"
+qb1.tostring());
system.out.println(
"singleton4:"
+qb2.tostring());
}
else
{
system.out.println(
"该对象的字符串表示形式:"
);
system.out.println(
"singleton3:"
+qb1.tostring());
system.out.println(
"singleton4:"
+qb2.tostring());
}
|
由此可看出来对象的字符串表示形式是不一样的 。
3:饿汉式单例 。
饿汉式单例类.在类初始化时,已经自行实例化 。
1
2
3
4
5
6
7
8
|
public
class
singleton1 {
private
singleton1() {}
private
static
final
singleton1 single =
new
singleton1();
//静态工厂方法
public
static
singleton1 getinstance() {
return
single;
}
}
|
因为这本身就是static修饰的方法,所以是在类加载的时候被创建,后期不会再改变,所以线程是安全的.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://blog.csdn.net/jjhahage/article/details/78277105 。
最后此篇关于图文结合讲解Java单例模式的文章就讲到这里了,如果你想了解更多关于图文结合讲解Java单例模式的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
composer的安装 注:我是的PHPstudy下安装的,其他情况也相似 1、配置环境变量 1、打开系统高级设置,具体操作如下图: 路径就是php根目录 2、打开ope
spring介绍 spring概述 spring是一个开源框架,spring是2003年兴起的轻量级java开发框架,由rod johnson 在其著作 expert one
卸载tomcat9 1、因tomcat的安装只需解压到某目录,卸载也只需将原tomcat目录删除即可 2、删除相关注册表。快捷键win+r呼出”运行“,输入"regedit"
本文介绍了从零开始SSM搭建步骤,分享给大家,有助于更好的搭建ssm 第一章:搭建整合环境 1. 搭建整合环境 整合说明:SSM整合可以使用多种方式,咱们会选择XML + 注解的方式 整合
tomcat 服务器是一个免费的开放源代码的 web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 jsp 程序的首选。本文主要讲述windo
1、建立虚拟主机 那么一个服务器上有两个网站,用户如何访问这两个网站呢?可以有三种方法。 1>两个网站使用不同的IP地址。这样用户在访问第一个网站需在浏览器中输入http://192.1
tomcat安装时默认的端口设置的是8080,而http协议的默认端口是80,所以测试tomcat时需要输入的网址为“http://localhost:8080”,若把tomcat的端口设置为80,
先谈谈dllhotst进程消耗cpu 100%的问题: 服务器正常cpu消耗应该在75%以下,而且cpu消耗应该是上下起伏的,出现这种问题的服务器,cpu会突然一直处 100%的水平,而且不会下降
介绍 kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: •kafka将
URL 静态化可以提高搜索引擎抓取,开启本功能需要对 Web 服务器增加相应的 Rewrite 规则,且会轻微增加服务器负担。本教程讲解如何在 IIS 环境下配置各个产品的 Rewrite 规则。
(amh为独立的一套lnmp/nginx虚拟主机面板,安装请使用纯净系统。不要安装其它的环境包。) (需要使用amh,请先检查你的系统是否支持,amh面板已支持centos、debian、ubunt
在爬虫的过程中,我们经常会遇见很多网站采取了防爬取技术,或者说因为自己采集网站信息的强度和采集速度太大,给对方服务器带去了太多的压力。 如果你一直用同一个代理ip爬取这个网页,很有可能ip会被禁止
*注:此文章谨以记录学习过程,分享学习心得! 刚刚开始了解springboot框架,觉得很好用,觉得很有必要深入学习一下该框架,现在就来创建一个springboot项目: 1、在idea上新建一
自从还了mac 后,原来的笔记本就闲置了下来,这台笔记本的配置还是不错的,可以装几个虚拟机用来平时的搭建小规模集群的实践。 准备工作 安装vmware 版本 :vmware workstati
前言 在用deepin用户界面的时候,做的是真心的好看,界面效果是真的美观简洁,没有那些花哨的特效,就是刚开始还有点不习惯的,尽量安装的时候电脑配置稍微高一点的, deepin 还是比较吃配置的,
本文着重讲解了windows下Git安装教程(图文),文中通过代码实例讲解的非常细致,对大家的工作和学习具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 github是一个项
重装原因:N点无法开通空间提示错误,我们希望重装N点后可以保留已开空间的信息。 1、备份N点管理系统的数据库,具体路径是C:\Program Files\NpointSoft\npointhost
本机电脑系统为:win7 本文以图片为主,含有大量图片 安装centos7虚拟机 新建虚拟机 一直点击下一步,直到分配内存(此处我分配了20g,根据个人情况而定) 创建成功后对硬
Godaddy每月给力的域名神码都深深地吸引着大批大批的站长们,可域名快要到期,转出或者续费就成为一个头痛的事情,下面给出最新的Godaddy域名转出教程,希望能帮助到大家。 1、登录Godad
复制数据库前要先确认目标数据库的服务是否启动 主要是sql server (mssqlserver)这个服务要启动起来其他的看自己的需求 复制数据库 下一步 输入
我是一名优秀的程序员,十分优秀!