技术标签: Java手写单列 懒汉式 饿汉式 Java单列 双重判定锁
package org.fh.action;
/**
* 饿汉式
* @author Administrator
*
*/
public class Singleton {
/**
* 私有的 final 修饰的变量 不能被二次赋值
*/
private static final Singleton singleton = new Singleton();
/**
* 默认的无参构造
*/
private Singleton(){
}
/**
* 公共的方法
*/
public static Singleton getInsta(){
return singleton;
}
}
package org.fh.action;
/**
* 懒汉式
* @author Administrator
*/
public class Singleton2 {
private static Singleton2 singleton2 = null;
private Singleton2(){
}
// 加锁
// 当第一个线程 执行完毕之后,第二个才能进去 弊端效率低
// 双重判定锁
public synchronized static Singleton2 getInstance(){
// 多个线程同时创建 该对象 (线程不安全)
if(singleton2 == null){
singleton2 = new Singleton2();
}
return singleton2;
}
}
package org.fh.action;
/**
* 双重判定锁 (效率高,线程安全)
* @author Administrator
*
*/
public class Singleton3 {
//禁止编译器重排序
private volatile static Singleton3 singleton3 = null;
private Singleton3(){
}
//
public static Singleton3 getInstance(){
// 执行效率高
if(singleton3 == null){
// 第一个线程执行完毕之后,第二个线程才能进去
synchronized (Singleton3.class) {
// 保证单例
if(singleton3 == null){
singleton3 = new Singleton3();
}
}
}
return singleton3;
}
}
package org.fh.action;
import org.fh.model.Book;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
//加载spring配置文件
ClassPathXmlApplicationContext cl = new ClassPathXmlApplicationContext("applicationContext.xml");
//取对象
BookAction bookAction = (BookAction) cl.getBean("bookAction");
BookAction bookAction2 = (BookAction) cl.getBean("bookAction");
//对象的哈希吗值一致说明 同一个内存地址
System.out.println(bookAction);
System.out.println(bookAction2);
//执行方法
bookAction.queryBook();
// true 同一个内存地址
System.out.println(bookAction == bookAction2);
System.out.println("======================================");
Book book = new Book();
Book book2 = new Book();
System.out.println(book);
System.out.println(book2);
System.out.println(book == book2);
System.out.println("======================================");
//创建的该类的无参构造
//Singleton singleton = new Singleton();
Singleton insta = Singleton.getInsta();
Singleton insta2 = Singleton.getInsta();
System.out.println(insta);
System.out.println(insta2);
System.out.println(insta == insta2);
System.out.println("======================================");
Singleton2 instance = Singleton2.getInstance();
Singleton2 instance2 = Singleton2.getInstance();
System.out.println(instance);
System.out.println(instance2);
//equals 比较的是内容 == 比较的是内存地址
System.out.println(instance == instance2);
}
}
文章浏览阅读1.3k次。jQuery插件本质上是将命名空间挂在全局的jQuery或jQuery.fn上而非使用define定义的模块。 JQuery的这种扩展机制同模块化要求模块的独立性,以及模块互相隔离有点冲突。 jQuery插件数目众多,我们不打算做大量的转换工作,为模块化而模块化,甚至改变插件的调用方式, 这样对开发带来的价值不大。只希望通过模块加载器实现自动的依赖管理,按需加载,并且使用方式自然。1.常见_jq $sea
文章浏览阅读6.1k次,点赞8次,收藏4次。先查看IIS里的"应用程序池",是否至少有一个DefaultAppPool,如果没有自己创建一个; 再点击IIS里的"网站",点击最右边的"设置网站默认设置",在弹出的窗口里面查看"应用程序池"是否被选择,如果为空,就随便选择一个。..._无效的应用程序池名称
文章浏览阅读1.1k次。transition 过渡用法_css的transition用法
文章浏览阅读895次。分组可以在远程数据上实现。如果选项groupDataSorted被打开,那么sidx参数将被放到分组列名上。这样,服务器就知道通过第一个分组咧进行排序,并且对列进行排序。HTML代码举例<html> <head> <title>jqGrid 实例</title> </head> <body> ..._jquery 多层分组统计
文章浏览阅读308次。浙大版《Python 程序设计》搞心态题目集锦(NO.1)(1).为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。输入格式:输入在一行中给出某用户的月用电量(单位:千瓦时)。输出格式:在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"_搞人心态的代码
文章浏览阅读4.3k次,点赞2次,收藏31次。第三步,进入vim /etc/named.rfc1912.zones配置文件,进行配置,pip.cc是我要设置的域名,而80.168.192是我设置的网段,其中file 名字,可根据你的需要起,并且要与/var/named/文件的配置文件一一对应。第四步,然后cd /var/named/目录下使用touch 创建两个文件要与上面的文件一一对应。dns服务:是域名解析服务,它的作用是将域名解析成IP地址,或者是将IP地址解析成域名。@dns.pip.cc. 是你的主机名加上域名(注意细节cc.的点点)_centos7搭建dns解析服务器
文章浏览阅读1k次。 在此之前,在其他平台上应用i2c总线用户接口(ioctrl)进行访问EEPROM,具体可以参考“嵌入式Linux下 24系列EEPROM/FRAM驱动”文章。现将其移植到RK3399平台运行。编译系统:Ubuntu16.04ARM硬件:firefly RK3399ARM系统:firefly Ubuntu16.04(SDK)连接i2c:i2c4EEPROM:AT24C02电路原理图..._rk3399 mac地址使用eeprom
文章浏览阅读1.6k次,点赞2次,收藏14次。背景老规矩首先背景介绍一下,目的就是为了把pytorch的模型部署在ros上,而ros主要使用的C++,所以我本次的目的就是使用C++调用模型。为什么使用C++呢?当然是因为c++的性能更高了。我的电脑配置:I5处理器英伟达的1050ti显卡,4g显存运行内存8Gcuda10.2,cudnn7.6.5pytorch模型将 PyTorch 模型转换为 Torch Script对于这步,ptorch的官网提供了两种方法,利用Tracing将模型转换为Torch Script通过Ann_yolov5如何部署到工控机上
文章浏览阅读1w次。问题1:Office安装报错错误详情:找不到Office.zh-cn\***.xml、.dll等文件解决方法:把Project 2013安装包(电脑安装过的微软办公产品)中的”office.zh-cn、office32.zh-cn、proofing.zh-cn、osm.zh-cn"这四个文件夹全部用office 2013安装包中,替换Office 2013安装包钟原始文件,即可成功安装。(重..._2016安装程序找不到proofing.zh-cn\proofing.xml
文章浏览阅读3.3k次,点赞2次,收藏3次。疑问:背景是有台物理机因为内存溢出 然后告警了 告警规则是 检测 message中out of memroy 字段,而且物理机是k8s的节点,这样 k8s的pod 如果出现out of memory 的话 会写入到 message中去么?答案:会的!内存溢出是系统判断的话就可以看到日志疑问:如果pod因为内存溢出导致pod重启的话,pod的日志也会进入到 /va/log/message 中?答案:不是pod日志 是系统识别某个进程内存溢出了 会显示到message里,因为pod 你可以当做一个进程在_监控message out of memory 日志 告警
文章浏览阅读346次。write_lenet(trainlmdb, testlmdb, batch_size_train=64, batch_size_test = 10, isdeploy = False): # our version of LeN..._deploy. pro
文章浏览阅读4.1k次,点赞2次,收藏9次。前言之前的文章讲了DEFORM文本模式下的前处理以及计算部分(点击下面的链接可以查看之前的文章),那后处理又怎么办呢?往期文章DEFORM文本模式(1):环境配置DEFORM 文本模式(2):命令的使用DEFORM文本模式(3):批量生成KEY文件及计算DEFORM提供了两种方式来提取后处理结果:文本模式的前处理器和文本模式的后处理器。最粗暴直接的方式就是打开前处理器的文本模式,然后加载DB文件的最后一步,再导出KEY文件,KEY文件中的关键字包括了所有需要的数据。.._deform的后处理文件如何打开