JAVA进阶
文章平均质量分 63
学习Java进阶的知识
高、远
唯有刻苦是真理
展开
-
Java进阶—— volatile 、JMM、双重检查以及创建单例对象的时候为什么要加volatile关键字?
文章目录【1】volatile的原理是什么?【2】关于JMM(清楚volatile的前提)【3】volatile变量的特性【4】doublecheck创建单例为什么需要加volatile?【1】volatile的原理是什么?volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。观察加入volatile关键字和没有加入volatile关键字时所生成的汇编代码发现,加入volatile关键字时,会多出一个lock前缀指令,lock原创 2021-10-16 17:04:05 · 433 阅读 · 0 评论 -
JVM之内存结构
文章目录【1】JDK、JRE、JVM的区别和联系【2】我们写的`.java`文件是怎么执行的 `JVM `扮演了什么角色?【3】JVM的内存划分一、Java虚拟机栈二、本地方法栈三、方法区四、堆【1】JDK、JRE、JVM的区别和联系JRE(Java Runtime Environment, Java运行环境)是Java平台,所有的程序都要在JRE下才能够运行。包括JVM和Java核心类库和支持文件。JDK(Java Development Kit,Java开发工具包)是用来编译、调试Java原创 2021-09-07 22:57:33 · 686 阅读 · 7 评论 -
Java 阻塞队列和线程池原理
用在生产者消费者模式中,平衡两者性能差异解耦有界无界Android中的handler部分的MessageQueue 就是一个优先级队列原创 2021-07-27 18:21:32 · 648 阅读 · 0 评论 -
JVM 对象分配流程 & GC机制
在这里我推荐一位朋友写的不错的文章:对象的分配及垃圾回收机制——JVM(2):https://blog.csdn.net/afdafvdaa/article/details/119778385原创 2021-10-16 21:02:13 · 180 阅读 · 0 评论 -
Java中Synchronized和Lock的底层实现到底有什么区别
【1】synchronizedsynchronized通过monitor和mutex lock实现了互斥synchronized是通过每个对象与之相关的一个叫做监视器(monitor)来实现的监视器内有个组件是计数器,默认值为0,当计数器为0,尝试加锁,加锁成功,计数器加1(本线程可以多次获取这个锁,可重入)其他线程发现计数器不为0,加锁失败进入阻塞监视器锁本质是依赖于底层的操作系统的Mutex Lock是互斥锁来实现的Mutex Lock指令的调用需要从用户态转换到核心态成本非常高,造原创 2021-10-16 20:17:07 · 566 阅读 · 0 评论 -
深入了解Java内存模型——JMM
这篇文章可能有点长,但是他想的非常详细从多核CPU+多线程引发的缓存一致性问题等来引出JMM的必要性,个人认为是一篇高质量的博客终于有人把Java内存模型(JMM)说清楚了https://www.jianshu.com/p/8420ade6ff76...原创 2021-10-16 19:56:09 · 138 阅读 · 0 评论 -
Java中任何一个对象(包括类对象)什么时候与一个Monitor对象相关联
本人没有验证过:这个monitor是用c++实现的叫objectmonitor。java实例对象里面记录了指向这个monitor的地址,这个c++的monitor对象里面记录了当前持有这个锁的线程id。原创 2021-10-16 19:39:37 · 330 阅读 · 0 评论 -
关于Java中的接口回调和retrofit中的反射
文章目录【前言】【1】情景假定一、最容易想到的方式二、接口回调①不定义接口②定义接口③为什么retrofit中大量用到反射和动态代理?【前言】以前总是碰到Java接口回调这个东西,每次都半懂不懂的,然后以为自己懂了,就放在旁边不管了,Android中现在用JetPack中的ViewMode后,接口回调用得少。过了很久让我来回答什么是接口回调的时候我又想不起来了。那今天就把他通透的梳理一遍,以免以后又要花半天时间来搞懂这个问题。【1】情景假定我们假定有这样一个情景,B类中有一个int类型的数据,C原创 2021-10-12 13:29:28 · 325 阅读 · 0 评论 -
序列化、反序列化demo
序列化demoMyClass代码:package com.example.lib;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;public class MyClass { public static void ma原创 2021-07-28 12:29:17 · 185 阅读 · 0 评论 -
ThreadLocal 原理解析(并不能解决多线程共享数据安全问题)
文章目录【1】一张类图了解下Thread、ThreadLocal、ThreadLocalMap、ThreadLocals【2】 ThreadLocal简介【3】ThreadLocal简单使用【4】ThreadLocal的实现原理【5】ThreadLocal被设计出来并不能解决线程安全问题【1】一张类图了解下Thread、ThreadLocal、ThreadLocalMap、ThreadLocals①ThreadLocal是一个类。ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建一个原创 2021-07-22 10:50:13 · 969 阅读 · 8 评论 -
十分钟深刻理解Java高级特性——反射
文章目录【0】在学习反射之前我们必须知道的一些知识(前言)①什么是class类?有什么用?②“一个类(而不是一个对象)在 JVM 中只会有一个Class实例”是什么意思【1】反射是什么?【2】反射有什么作用?一、我们直接来上一张图给出反射的作用!二、Java提供反射主要有那些用处?【3】我们如何使用反射?①获取Class对象(使用反射就必须要先获取Class对象)②利用反射创建实例③获取构造器信息④获取成员变量信息⑤调用实体类中的方法1. 首先需要获取类中的方法——4中方法(同上述获取构造器和属性类似):2原创 2021-07-13 22:41:07 · 391 阅读 · 3 评论 -
10分钟深刻理解 Java高级—— 注解
文章目录【1】什么是注解?【2】注解有什么用?【3】如何使用注解?一、如何声明注解?二、什么是元注解?①`@Target`作用②`@Retention`作用(特别重要)`RetentionPolicy.SOURCE``RetentionPolicy.CLASS``RetentionPolicy.RUNTIME`③`@Documented `作用④`@Inherited `作用有4个元注解,但我们平时通常使用两个元注解:`Target`,`Retention`【1】什么是注解?Java 注解(Anno原创 2021-07-11 22:39:34 · 117 阅读 · 2 评论 -
十分钟深刻理解 Java高级——泛型
文章目录【1】什么是泛型?【2】为什么需要泛型?【3】如何使用泛型?一、泛型类和泛型接口二、一个类如何实现使用泛型接口的类?三、泛型方法的使用①什么是泛型方法?②普通方法:③泛型方法:【4】泛型范围:一、 ```T extends String```二、通配符:① `? extends X`②`? super X`【5】Java伪泛型与泛型擦除【1】什么是泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原原创 2021-07-11 21:09:08 · 678 阅读 · 10 评论 -
Java中序列化和反序列化时为什么一定要实现Serializable接口?为什么需要指定serialVersionUID?
转载:https://www.cnblogs.com/chengxy-nds/p/12347324.html转载 2021-03-14 10:56:44 · 234 阅读 · 0 评论 -
Java进阶——泛型擦除的所有问题你都能得到解答
1.Java泛型的实现方法:类型擦除大家都知道,Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,正确理解泛型概念的首要前提是理解类型擦除。Java的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的,使用泛型的时候加上类型参数,在编译器编译的时候会去掉,这个过程成为类型擦除。如在代码中定义List和List等类型,在编译后都会变成List,JVM看到的只是List,而由泛型附加的类型信息对JVM是看不到的。Java编译器会在编译时尽可能的.转载 2021-03-10 20:49:44 · 237 阅读 · 6 评论 -
Java中使用字符流读取UTF-8和写出txt文件 乱码 问题
乱码问题一直都是非常难受的问题,本文解决Java中使用字符流读取UTF-8和写出txt文件 乱码话不多说,直接上图输出结果:使用代码:解决:原创 2021-02-26 18:34:32 · 981 阅读 · 1 评论 -
一文搞懂Java多线程基础(锁机制、线程通信、线程池)
一文搞懂Java多线程首先理解线程和进程的概念!进程我们都知道计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序,数据集合和进程控制块三部分组成。程序用于描述进程要完原创 2021-02-22 13:08:28 · 263 阅读 · 2 评论 -
Java 字节流读取read ()方法返回int 而不是byte 的原因
Java 字节流读取read ()方法返回int 而不是byte 的原因:文件读取完使用-1判断,而1111 1111在byte 中表示-1,会导致误判断,误以为文件已经读取完成。所以将byte用int封装,int4位,每位8字节,共4*8=32字节;前面24位用0填充,遇到1111 1111就是255,解决误判断的问题...原创 2021-02-04 12:38:04 · 200 阅读 · 2 评论