![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 63
不署名
一个正在缓慢成长的才华有限的Java小菜鸟
展开
-
多线程(3)
Synchronized补充1.对象头上有64位其中两位标志是否被锁定(markword)2.可以锁对象,锁类对象,锁代码块,锁方法3.可重入锁(m1掉m2方法可以成功(两个方法都加了sync),比如父子方法)4.加了sync和不加sync可以同步进行5.锁升级 只有一个线程:只记录markword的ID(偏向锁) 如果有线程争用,升级为自旋锁(转圈10次) 然后升级为重量级锁(OS层次)6.加锁决策 执行时间长,线程多,用重量级锁 执行时间短,线程少,用自旋锁volatile保证线程可见性原创 2021-03-08 21:34:30 · 66 阅读 · 0 评论 -
多线程(2)
概论多线程是为了提高CPU的利用率,多线程是随机的,是异步的。当多个线程同时操作一个可共享的资源变量时,将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。实现同步的方式1.synchronized可以修饰一个方法public synchronized void set(){}可以修饰一个代码块public void save(){synchronized (this){ count += m原创 2021-03-08 21:26:49 · 47 阅读 · 0 评论 -
多线程(1)
概念进程:正在进行的一个过程(任务管理器每一个process)线程:CPU独立运行和独立调度的基本单位,或者说进程的一个执行路径多线程的意义提高CPU的利用率,多个线程之间是异步执行PS:好比你要煮一碗面,可以在烧水的时候去切菜。烧水,切菜两件事情可以同时进行,没必要等烧好水再去切菜。如何创建一个线程1.Thread类2.实现Runnable接口3.Executors.newCacheThread线程有哪些方法start() 启动一个线程sleep() 当前线程睡眠,让给其他线程执原创 2021-03-08 20:59:53 · 72 阅读 · 0 评论 -
记一次OOM排查优化问题
一、OOM简介以下为转载的一些知识点,这边主要是记录以下排查过程1.jvm内存分配不够,电脑内存的大小,不等于java程序能够使用的内存大小。jvm分配的内存大小,可以在JVM启动时,通过配置文件配置。2.内存利用不当,有两个表现,内存泄漏和内存溢出。内存泄漏:对象使用完毕后,不能够及时销毁,变成内存垃圾,如果不能够及时清理,内存垃圾越来越多,可用内存越来越少,影响程序的健康运行。虽然ja...原创 2020-02-12 13:55:30 · 303 阅读 · 0 评论 -
记一次Spring自动配置类配置冲突问题
起因这里暂且将自动配置类称之为服务提供方,将使用这个自动配置类的称之为调用方。提供方和调用方都是依靠IDEA自动生成的SpringBoot 项目。提供方有着自己的配置参数,调用方也有着自己的配置参数,调用方使用提供方提供的组件(组件已经装配好特有的参数),问题在于组件的参数注入失效参数注入方式这里是为了做实验,刚开始还以为是注解的原因,所以采用了两种配置参数注入方式,以作比较一、@Valu...原创 2019-12-26 21:28:19 · 917 阅读 · 0 评论 -
反射的运用
一、反射介绍定义在运行时期,能够动态访问、检测完整类结构信息甚至修改类本身的一种能力特点优点灵活性高,因为是动态编译。(静态编译即编译器是确定类型&绑定对象;动态编译即运行期确定类型&绑定对象)动态编译体现了Java的灵活性、多态特性&降低类之间耦合缺点执行效率低,主要通过JVM执行,所以时间成本会 高于 直接执行相同操作反射调用方法是通过inv...原创 2019-10-01 15:03:35 · 140 阅读 · 0 评论 -
Lambda表达式
一、定义Lambda表达式是一个对象,是函数式接口的实例;优化性替代匿名内部类,简洁易懂;提升了对集合、框架的迭代、遍历、过滤操作;二、语法语法格式为(参数)->表达式(参数) -> {多行的方法具体实现};(参数) -> 单行语句()里面参数个数对应函数式接口里面抽象方法的参数个数(直接省略了方法名字);PS:方法重载的时候怎么选择的方法如果只有一个可...原创 2019-10-01 15:04:49 · 123 阅读 · 0 评论