public class Singleton {
private Singleton() {
}
private static class SingletonHolder{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
首先了解一下静态内部类的优点:
在类加载的最后一个阶段:类的初始化,本质就是执行类构造器的<clinit>
方法。<clinit>
是由javac编译器生成的,JVM内部会保证一个类的<clinit>
在多线程环境下被正确的加锁同步,简单来说就是如果有多个线程同时去做类的初始化工作,那么只有一个线程会执行<clinit>
方法,其他线程会阻塞,直到执行完,其他线程唤醒,但是不会再次执行<clinit>
方法。也就是说,一个类只会初始化一次。
再看上面的单例可以简单看出,这里对INSTANCE的赋值操作,编译之后实际上就是一个<clinit>
代码,当我们执行getInstance()时,会导致SingletonHolder类的加载,类加载的最后会执行类的初始化操作,即使在多线程下<clinit>
也只会被执行一次,所以他只有一个实例存在,从而避免多线程的问题。
public class Singleton{
private static Singleton instance= null;
private static Singleton(){}
public static Singleton getInstance(){
if(instance==null){
instance = new Singleton();
}
return instence;
}
}
public class Singleton{
private static Singleton instance =null;
private static Singleton(){}
public static synchronized getInstance(){
if(instance==null){
instance =new Singleton();
}
return instance;
}
}
评论里面有些同学有疑问关于如何学习material design控件,我的建议是去GitHub搜,有很多同行给的例子,这些栗子足够入门。
有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现**NDK并不是神秘的东西,**你跟着官方的步骤走一遍就知道什么回事了,无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。
一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。
由于文章篇幅问题复制链接查看详细文章以及获取学习笔记链接:前往我的GitHub
想要发送模板消息,首先需要获取到用户的 formId,因为用到获取用户 formId 的请求很大可能会复用,所以我这里把他放到app.js 里面封装起来,方便调用。请看代码:nofollow">util.js 下载地址//app.jsvar util = require('utils/util.js');App({onLaunch: function () {var that = this;...
ip [选项] 操作对象{link|addr|route...}#ip addr show # 显示网卡IP信息# ip addr add 192.168.0.1/24 dev eth0 # 设置eth0网卡IP地址192.168.0.1# ip addr del 192.168.0.1/24 dev eth0 # 删除eth0网卡IP地址#ip link ...
为什么80%的码农都做不了架构师?>>> ...
暴力破解–最长重复子串文章目录暴力破解--最长重复子串本文知识点(你可能会学到):1. 求子串算法2.BF算法(串的模式匹配算法)3.求最长重复子串(遍历)完整代码end本文知识点(你可能会学到):求子串算法BF字符串匹配算法(进阶KMP算法更好)字符串中的所有子串进行遍历1. 求子串算法//求子串int seekSubString(string* sub,string* s,int start,int sub_len,int s_len)//子串,主串,子串开始位置,子串长度,主
<!doctype html><html><head><meta charset="utf-8"><title>无标题文档</title> <link rel="stylesheet" href="css/css.css"></head><body> <div class="fontr"> <a...
org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing
在浏览器中,打开开发者选项(F12)找出对应的class,给其添加一个点击事件,就可以了。具体的 document 操作,看这里 ---->https://www.cnblogs.com/oukele/p/10014192.html实现效果的另一种方案:https://www.cnblogs.com/oukele/p/10191533.html转载于...
sdfsdfsdafasdfasdf 首先查看当前的数据文件及数据文件状态:SQL> select file_id,tablespace_name,file_name,status from dba_data_files; FILE_ID TABLESPACE FILE_NAME STATUS---------
SQL Server 2008 R2 Service Pack 3 (SP3) is now available for download. SQL Server 2008 R2 service packs are cumulative and can be used to upgrade all releases of SQL Server 2008 R2 to Service Pack 3. ...
Colnago,DeRosa,Bianchi,Gios,Cinelli意大利的五大自行车品牌,也就是所谓的一王四后。 //z 2014-12-08 12:56:09 L.23 '39831 [email protected] T727794647 .K.F4064690091[T54,L3045,R97,V2257]Colnago品牌历史:1944年,Ernestocolna...
Tampermonkey for mac Safari是一款浏览器扩展和最为流行的用户脚本管理器,Tampermonkey 提供了诸如便捷脚本安装、自动更新检查、标签中的脚本运行状况速览、内置的编辑器等众多功能, 同时Tampermonkey还有可能正常运行原本并不兼容的脚本。Tampermonkey for Safari需要在App Store中购买才可以使用的这是油猴插件(Tampermonkey)的下载地址,新版本在App Store中是收费的。在BigSur 中Safari14.
这个元旦假期过的比较奇怪,为了向远方的GF表示忠诚。除了1号和同学吃了个大锅饭之外,尽量做到了大门不出二门不迈,躲在闺房守岁:)。 在家闲着也不能干闲着,总得做点事情,想起前段时间一个师兄交代给我的任务:把若干个qq群串在一起。X国的政策一向比较Bt,你说开个群还要限制人数。H大在深圳有几千校友,一个群怎么可能放的下那么多人。好多在tx工作的师兄,明确告诉:我买通tx的人是不大可能了,搞一