学习日记
文章平均质量分 70
cxwx
这个作者很懒,什么都没留下…
展开
-
ThreadLocal的使用原理及内存泄漏原因
ThreadLocal的使用原理及内存泄漏原因ThreadLocal类,字面意思是本地变量,ThreadLocal可以为在每个线程中都创建一个副本,每个线程可以访问自己内部的副本变量。1.API使用简单看看如何使用这个类:public class ThreadLocalTest { public static void main(String[] args) { ThreadLocal<String> name = new ThreadLocal<>(原创 2021-08-06 09:28:57 · 263 阅读 · 0 评论 -
volatile关键字是如何禁止重排序的
Volatile关键字是如何禁止重排序的?先说结论:由于对volatile变量的复制操作之后会加上一句“addl$0x0,(%esp)”指令操作,而这个额外添加上的指令和后续对volatile操作的其他指令没什么关系,根本没有必要把这两个指令放在一起,没有优化的空间。有个朋友在阅读周志明老师的《深入理解Java虚拟机》时,发现书中是这么解释Volatile关键字可以禁止重排序的:那为何说它(volatile)禁止指令重排序呢?从硬件架构上讲,指令重排序是指处理器采用了允许将多条指令不按程序规原创 2021-04-24 16:03:22 · 989 阅读 · 0 评论 -
SpringBoot配置文件无效,有标识却报错。
今天写项目的时候发现自己的 YAML 文件的内容没法生效,但IDEA中是能看到文件变成了配置文件的标识。仔细检查发现这个文件与其他文件有所区别:就是它没有后缀。究其原因是在创建文件的时候,没有先确定文件格式,而是像下面一样选择的:而这样的文件竟然是没有后缀的,真是坑爹了。从文件属性里也能看出来,确实没有后缀。猜测可能是IDEA的锅。...原创 2021-04-12 14:00:23 · 520 阅读 · 0 评论 -
Nginx反向代理、负载均衡
NginxNginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。1.功能特点反向代理负载均衡动静分离并且Nginx能够支持高达 50,000 个并发连接数的响应,Nginx选择了 **epoll **和 **kqueue**作为开发模型。2.反向代理2.1正向代理在客户端没办法直接访问的前提下,找一个服务器帮忙访问再将数据传回来,比如玩游戏的加速器VPN等。可以看出来,正向代理是对客户端的代理,对服务端隐藏了访原创 2021-04-10 15:31:02 · 75 阅读 · 0 评论 -
Volatile关键字可见性
Volatile关键字可见性Java中volatile关键字用来修饰需要在多个线程之间保证修改可见性,但它不仅仅只用来保证被volatile修饰的变量,也可以保证同类实例中其他变量的可见性。class MyTest{ static class MyClass{ public int years; private int months; private volatile int days; public void update()原创 2021-04-06 19:40:06 · 97 阅读 · 0 评论 -
ReentrantLock是怎么保证线程安全中的可见性的?
ReentrantLock是怎么保证线程安全中的可见性的?众所周知,可重入锁ReentrantLock可以用来实现线程安全(可见性,有序性,原子性),其中有序性和原子性都能理解,那么可见性是如何保证的呢?1.锁中更改volatile变量class MyTest{ static class MyClass{ public volatile int a = 0; public int b = 0; } public static void main(原创 2021-04-06 19:05:38 · 880 阅读 · 1 评论 -
Java内部类与接口回调
Java内部类与接口回调1.内部类内部类顾名思义就是定义在一个类中的类。内部类可以分为:普通内部类、静态内部类、局部内部类、匿名内部类。2.普通内部类1.定义方式将内部类定义在一个类的方法外,且非static修饰的就是普通内部类。内部类限定词可以为public、private、protected。当为private时,只有在外部类的方法中可以构造它。当为protected时,需要写限定词为public的内部类构造函数才能在子类中调用构造函数。class Outer{ private原创 2021-02-21 09:02:13 · 301 阅读 · 0 评论 -
细说为什么重写equals必须要重写hashCode
为什么重写equals必须要重写hashCode1.一些误区重写了equals不重写hashcode并不会报错,只是逻辑上会出错。并不是每次重写equals都需要重写hashcode,但推荐都写上。2.为什么要重写equals要理解重写hashcode的必要性,我们先来讲讲为什么要重写equals。原因也很简单,默认的equals方法不够看了,需要给它升级一下。先看看所有类的祖宗Object类中equals方法的代码,这可以让我们理解为什么要重写equals。public boolean原创 2021-02-16 15:34:57 · 1689 阅读 · 2 评论 -
Java向上转型
Java向上转型1.向上转型1.1 无重载情况在平常的学习中,我们都知道继承是"is-a"关系,即子类属于超类的一,比如学生是人。我们一般都把学生和人两个类分别使用。如果我们把学生当作人来使用,就是向上转型。public class FatherNewSon { public static void main(String[] args) { People people = new Student(); people.display(); Sy原创 2021-02-15 12:55:51 · 922 阅读 · 2 评论 -
Java继承总结
Java继承总结1. 继承的结果1.1 继承的限定词在Java中只有公有继承,而不像C++那般复杂。可以简单的理解为子类所继承到的内容都被超类属性和方法的限定词所限定,只受其影响。范围publicprotecteddefaultprivate同类√√√√同包子类√√√非同包子类√√非同包非子类√tips1:注意protected和default的区别tips2:private子类能不能继承到超类的属性将在下面详细介绍原创 2021-02-15 09:39:58 · 258 阅读 · 2 评论 -
sizeof运算符
sizeof运算符sizeof 运算符返回一条表达式或一个类型名字所占的字节数。sizeof (type)sizeof expr1. sizeof运算符并不实际计算其运算对象的实际大小Sales_data *p;sizeof p; //指针所占的空间大小sizeof *p; //即sizeof Sales_data/* 在sizeof的运算对象中解引用一个无效的指针仍然是一种安全的行为。*/void* pp;sizeof pp; //虽然pp指针并未初始化,但仍可以对它求字节数。结原创 2020-09-25 23:21:03 · 410 阅读 · 0 评论