![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
文章平均质量分 91
georgesnoopy
这个作者很懒,什么都没留下…
展开
-
jdk中juc多线程编程工具
Future其实是对将来某个时刻会发生的结果进行建模,封装了一种异步计算,返回这个异步计算结果的引用,通过这个引用可以获得运算的状态,以及当运算结束后可以通过这个引用获取异步运算的结果。这比直接使用Thread会好用很多。通过Future之所以能够获得子线程异步计算的结果,其本质是因为父子线程是共享使用了进程分配的资源。原创 2023-05-03 07:46:59 · 977 阅读 · 0 评论 -
jdk中的CAS实现乐观锁 vs 数据库乐观锁
悲观锁读写锁乐观锁基本思想,java实现、数据库实现。自旋锁、轻量锁、偏向锁mvcc不共享不共享资源单线程原创 2021-04-14 17:51:39 · 775 阅读 · 2 评论 -
结合java中的锁聊聊锁的本质
在操作系统里面,也会遇到什么信号量、互斥量,然后说利用互斥量、信号量可以实现锁的功能,而操作系统提供的原语有又mutex锁在学习数据库的时候,什么表锁、行锁、读锁、写锁、排它锁、意向锁、meta锁等等,各种各样的锁的概念蜂拥而至在学习java的时候,我们会学习到synchronize关键字、jdk里的Lock接口,然后有各种各样的Lock的实现;然后在聊synchronize的时候又会又各种锁的概念出来:自旋锁、偏向锁、轻量级锁、重量级锁。原创 2023-02-28 20:55:58 · 684 阅读 · 0 评论 -
springmvc统一日志打印request和response内容
在web项目中,有不少场景需要统一处理一些和实际业务基本不相关的逻辑,比如rest接口的监控、出入参日志、操作记录、统一异常处理(避免将错误堆栈等信息直接打到web端)。如果你觉得日志打印rest接口出入参非常简单,直接getParameter()就好了,那么多思考3s继续看吧。原创 2023-01-19 13:48:12 · 4273 阅读 · 0 评论 -
java的垃圾回收浅谈
垃圾回收过程其实都包含两步:标记+回收。综合来看,复制算法适合在垃圾回收执行时存活对象比较少的场景;整理算法适合在垃圾回收时存活对象较多但是不能有内存碎片的场景;而清理算法因为会产品内存碎片,实际的场景其实并不多,CMS使用该算法,但也诟病比较多。对于一个java进程中的对象,经过统计发现,大部分对象生命期都是比较短的,活不过一次垃圾回收,而少部分生命期比较长,多次gc后依然存在,甚至和java进程生命期相同。针对这种情况,就对java的内存进行了分区,不同分区使用不同的回收算法,来达到最大的收集效果。原创 2022-12-16 14:41:40 · 1271 阅读 · 0 评论 -
记一次线程池使用导致的死锁
top统计的是当前统计窗口里的情况。一般情况下,只要不是宿主机上的所有容器负载都很大,超卖是没有影响的,即只要没有把物理机cpu打满,超卖就超卖,反正也用不完,但是只要某一时刻兄弟们要求的12个cpu都要用的时候,那就完了,物理机cpu使用率飙高,这个时候进程上下文切换更加频繁,雪上加霜,系统会更慢的。但还有一点人性没有泯灭,当时这么写的时候,其实有点膈应,但是一个闪念的想法让我就这么写了:任务里的操作其实会很快,因为有两层缓存,即走到了db,也一定走上索引,应该不会慢的,就这样吧,应该问题不大。原创 2022-08-19 15:38:05 · 1013 阅读 · 0 评论 -
分布式系分发展概览
整体的发展历程推动数据库技术大发展的一个重要功能就在于,通信技术领域和计算机科学领域的量大领域的碰撞催生出的互联网行业,在互联网中各种各样的创新业务不断涌现,百花齐放,企业数据量也呈现出了爆发式的增长,读写性能要求也越来越高。围绕解决数据存储和访问的各种问题,出现了各种各样的技术。...原创 2022-07-26 08:58:39 · 277 阅读 · 0 评论 -
jdk中线程池的promise模式-Future
https://blog.csdn.net/sinat_14913533/article/details/104918942这篇说明了线程池的基本原理。但是在使用线程池的时候,我们会发现我们可以:1向线程池中提交Runnable任务,也可以提交Callable任务,但是Thread只能驱动Runnable任务,那线程池是怎么实现Callable到Runnable的转换的。 我们还可以通过ExecutorService#submit()方法返回的Future#get()方法去检查任务的执行状态,以及获.原创 2021-08-28 09:45:59 · 448 阅读 · 0 评论 -
ThreadLocal那些事
ThreadLocal其实是操作了Thread#threadlocals变量,因为这是Thread的私有变量,所有每个线程实例都有自己的,从而达到线程不共享的目的。如果我们要跨线程传递变量,那就要自己显示的去实现跨线程传递。jdk中还有一个ThreadLocal的子类,可以实现跨线程传递:子线程可以读取父线程的本地变量,那就是InheritableThreadLocal,Thread中还有一个变量inheritableThreadLocals,这个变量的类型和Thread#t...原创 2021-07-03 08:30:01 · 320 阅读 · 1 评论 -
如何理解CMS回收器降低gc停顿时间
不管采用什么回收算法,垃圾回收都会包含两个大的过程:标记、回收。标记:标记的目的就是识别出哪些对象是垃圾了。这个阶段按道理一定是STW的,否则就标记不出所有的垃圾对象,因为如果有并发,一边标记、一边会有垃圾产生,这个理论上永远标记不完。 回收:就是将标记出的垃圾对象回收,腾出内存。这个阶段分回收算法。这个看算法,比如标记-清理算法,在清理阶段是不需要STW的,因为清理阶段只是标记内存可重用就好了。而标记-整理我理解是需要的,因为整理的时候会改变对象的内存地址,同理复制算法也是。分代收集的理论基础:标原创 2021-03-31 09:59:07 · 1094 阅读 · 0 评论 -
javap反编译字节码详解
package com.zjj;import java.io.IOException;import java.util.ArrayList;import java.util.List;/** * create by zhaojiang02 2019-06-01 */public final class ClassFileTest { private int privat...原创 2019-06-02 12:33:43 · 1269 阅读 · 0 评论 -
HashMap的线程安全
学习java的人都知道,HashMap是线程不安全的,不能在多线程环境下共享一个HashMap变量,在jdk1.7中的HashMap的实现,多线程下共享HashMap会导致死循环(有hash冲突的时候,链表上可能存在环导致死循环),但是在jdk8中对这个写法作了优化,不会导致死循环了,但是依然是线程不安全的,多线程下数据是不准确的。这里不是想说HashMap为什么不安全,然后分析他的源码,然后...原创 2019-11-30 10:21:33 · 850 阅读 · 1 评论 -
从线程状态机上看如何优雅停止线程
目录如何优雅的终止线程暂停线程的方法RUNNALBE-->BLOCKEDRUNNALBE_WAITING/TIMING_WAITINGLock等待锁,Condition等待条件LockSupport.parkObject.waitThread.sleep()Thread.join()其他如何优雅的终止线程Thread中提供了stop()等方法,...原创 2019-11-30 09:05:49 · 1138 阅读 · 2 评论 -
jdk线程池实现原理分析
目录为什么需要线程池生产者-消费者模式promise模式ThreadPoolExecutor生产者-消费者实现promose模式实现使用为什么需要线程池先来看看数据库连接池吧。我们在实际生产中使用数据库,基本上应该没人是直接使用jdbc的吧,而是都心照不宣的使用了数据库连接池。那么为什么?最简单的回答就是为了连接复用。那么我们为什么需要复用数据库连接呢?简单...原创 2020-03-17 13:58:44 · 395 阅读 · 1 评论 -
深入剖析单例模式的实现
单例的实现饿汉模式最朴实无华且能保证没有并发问题的就是提前初始化(饿汉模式,忽略这个叫什么,不重要)。public class LazyInstance{ private static ExpensiveObject instance = new ExpensiveObject(); public static ExpensiveObject getInstan...原创 2020-03-13 11:21:15 · 136 阅读 · 0 评论 -
简单对象池(享元模式)的实现
有死锁的版本public class ObjectPool<T> { private static final Logger LOGGER = LoggerFactory.getLogger(ObjectPool.class); private final Lock lock = new ReentrantLock(); private Semaphor...原创 2019-09-23 16:33:00 · 200 阅读 · 0 评论