自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(6)
  • 收藏
  • 关注

原创 volatile关键字原理分析

为什么多线程会造成线程不安全cpu缓存由于磁盘io、内存io耗费时间比较多,为了提高cpu利用率,做了3级cpu缓存,L1、L2、L3 - 这就会导致多核cpu中操作不同数据,对其它cpu中内容是不可见的 - 比如cpu1从内存中读取了i=1,进行i+1操作 - 当这个操作的内容还没有放到内存中时,cpu2读取的i还是等于1于是cpu为了解决这个问题引入了总线锁和缓存锁 - 总线锁:锁内存与cpu之间交互的过程,粗粒度锁,一旦锁住整个内存都被锁住 - 缓存锁:只锁住cpu操作的这个缓存

2021-06-19 21:21:08 146

原创 线程锁级synchronize分析

为什么要有线程锁多线程修改同一个共享资源或者变量时会存在线程安全的问题,比如a线程修改i值为1,b线程修改i值为2,因为线程运行是异步的,这就会造成一个问题,当a先运行结束i值就为1,反之i就为2,这就造成了不确定性,会来带一系列的问题有哪些线程锁1.乐观锁:cas操作,自旋通过对比原来的值来修改为新的值,线程一直运行2.悲观锁:直接加锁,造成阻塞3.重入锁:一个线程多次获得锁,当线程调用加锁的A方法,而A又调用加锁的B方法就需要重入4.共享锁:读锁,每个锁都不互斥,相当于无锁5.读写锁:同时

2021-06-19 16:15:24 139

原创 线程日志分析方法

cpu占用率不高,响应很慢1.通过jps命令查看java线程的pid2.通过jsack查看线程日志如果日志出现Found one Java-level deadlock代表出现死锁cup占用率很高1.top -c 显示进程占用资源排行榜,拿到pid2.通过 top -H -p pid查看该进程中消耗cpu靠前的线程级占用状况3.通过printf “0x%x\n” 线程pid,转换成16进制的pid4.使用jstack pid查看日志...

2021-06-19 00:22:00 649

原创 线程的原理分析

线程的由来进程的开销比较大,cpu切换很耗时间,一个进程中也需要多个任务同时进行,例如一个浏览器可以打开多个页面进行浏览操作,一个页面又可以通过异步渲染来提升用户体验度线程的就是最细力度的cpu运行单位,为了提高运行效率和减少资源占用线程创建的几种方式1.继承thread类,java类只能继承一个类2.实现runnable接口,底层也是实现的Thread类, java类可以多实现,因此多用这种方式3.实现callable/future,带返回值的线程4.线程池创建线程的六种状态1.NEW

2021-06-18 23:41:52 150

原创 线程池的原理分析

线程池的原理分析为什么要用线程池常见的几种线程池及创建方式线程池的原理分析线程池运行过程中的疑问线程池参数的一些思考为什么要用线程池线程高并发时期的创建与销毁都需要消耗大量的性能,线程的创建、销毁与数量无法管控使用线程池可以有效的管理线程,提高运行速度与效率常见的几种线程池及创建方式Executors.newFixedThreadPool(poolSize); //固定大小线程池Executors.newCachedThreadPool(); //可缓存线程池Executors.newSing

2021-06-18 01:04:29 71

原创 netty的byteBuf

1.byteBuf是什么byteBuf是netty对nio的byteBuffer的现实,因为byteBuff使用场景有限2.byteBuf类关系图3.为什么netty要用bytebuf来替换bytebuffer1.使用readIndex和writeIndex来解决每次读写时需要进行flip操作的问题简化了读写的操作,读有读的指针,写有写的指针,互补干扰2.封装了每次put需要进行可写空...

2019-10-14 19:35:03 421

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除