![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
cafe-BABE
嵌入式
展开
-
【JVM】利用枚举实现单例模式完全讲解!!
目录代码程序简单讲解继续深入代码首先直接给使用枚举实现单例模式的代码: public class User { //私有化构造函数 private User(){ } //定义一个静态枚举类 static enum SingletonEnum{ //创建一个枚举对象,该对象天生为单例 INSTANCE; private User user; //枚举的构造函数天生且必须是priva原创 2020-07-15 11:32:53 · 818 阅读 · 0 评论 -
【JVM】为什么静态内部类实现单例模式是线程安全?
首先给出代码://基于类初始化的线程安全的单例class SingleTon4{ private SingleTon4(){} private static class InnerClass{ private static SingleTon4 instance= new SingleTon4(); } public static SingleTon4 getInstance(){//如果没有到这里,那么不会加载上面的内部类 return InnerClass.inst原创 2020-07-14 21:36:35 · 5178 阅读 · 4 评论 -
【JVM】java中泛型底层是如何实现的??
首先说说语法糖首先,在讲java中的泛型之前,需要介绍一下语法糖。什么是语法糖呢?简单来说,就是在计算机语言里面通过添加某种语法,这种语法不会对语言的编译结果产生实际的影响,但是可以使得程序员更方便的使用该语言,增加程序的可读性,减少代码量,提高开发效率。java里面常见的语法糖除了泛型除了之外,还有自动装箱拆箱,变长参数,他们都是语法糖。但是实际上JVM虚拟机并不支持这些语法糖中的语法,他们会在编译阶段被还原成原始的基本语法结构。再谈泛型现在我们了解到了,泛型其实是java语法糖里面的原创 2020-07-07 11:40:17 · 2285 阅读 · 4 评论 -
【并发】Lock类的底层实现原理
虽然都是用来实现锁功能,但是lock需要显式的获取和释放锁,而synchronized是隐式的获取和释放锁,虽然synchronized用起来比较方便,但lock能够以非块结构来实现互斥同步,更加自由。同步器队列同步器是lock如何完成线程同步的关键,同步器依赖内部的一个同步队列(FIFO的双端队列)来完成同步操作。具体来说,就是如果当前线程获取同步状态失败(也就是获取锁失败),同步器就会把当前线程和等待状态等信息构造成一个节点(Node),并把这个节点加入同步队列,并阻塞这个线程。同步器里面有原创 2020-06-28 13:55:18 · 445 阅读 · 0 评论 -
【JVM】synchronized为什么具有可见性,原子性,有序性?
对于为什么volatile具有:“有可见性,有序性,但没有原子性”,可以看我的另一篇博客:https://blog.csdn.net/qq_35590091/article/details/106986536synchronized是互斥同步的手段的一种,主要用来解决多个线程并发访问共享数据时,保护数据的一致性的问题。原子性 synchronized经过编译之后,对应的是class文件中的monitorenter和monitorexit这两个字节码指令。这两个字节码对应的内存模型的操...原创 2020-06-27 19:19:55 · 1339 阅读 · 1 评论 -
【JVM】为什么volatile有可见性,有序性,但没有原子性
可见性当一个变量被定义为volatile,它将具备两个特性,第一个是保证变量对所有线程具有“可见性”,具体来说就是当一个线程对该变量进行了修改,那么别的线程会立即得知(这个变化)。那么可见性的实现原理是什么呢?实现原理:如果使用这个修饰符,对该变量进行写操作之后,会立即执行store和write操作(对应的汇编代码中会加上一个lock前缀),立即将该变量从工作内存(或者说缓存)写入主内存,保证了对别的线程立即可见(因为这会导致别的线程的工作内存中该变量的缓存会失效),并且同时其他的cpu的工作内原创 2020-06-27 19:09:08 · 385 阅读 · 0 评论