- 博客(89)
- 收藏
- 关注
原创 JUC-CountDownLatch源码分析
建议阅读CountDownLatch源码分析之前,,了解一下CountDownLatch用处以及基本用法。我们知道CountDownLatch是一个同步工具类,表示允许一个或者多个线程来等待其他的线程来完成它们的操作后,才继续执行自己的操作。.........
2022-07-24 22:42:29
307
原创 JUC-Semaphore源码分析
建议阅读Semaphore源码分析之前,先阅读,了解一下Semaphore用处以及基本用法。我们知道Semaphore是一个信号量,在java并发编程中,Semaphore本质上是一个共享锁的,用来限制多线程对共享资源的并发访问的。......
2022-07-24 22:07:31
328
原创 JUC-ReentrantReadWriteLock锁源码分析
1.ReentrantReadWriteLock类结构图1.1 ReentrantReadWriteLock的构造方法1.2 ReentrantReadWriteLock的成员变量的作用及其内部类中成员变量的作用。1.3 ReentrantReadWriteLock有两把锁,读锁跟写锁,但是只有一个state变量,那么怎么用一个state变量来同时代表两把锁呢?2. 读锁readerLock源码2.1 获取读锁2.1.1 tryAcquireShared方法源码2.1.2 readerShou
2022-07-24 18:50:18
274
原创 我的创作纪念日
我的创作纪念日-相信每一位程序员都知道优快云这一技术分享平台,大家平常在开发过程中遇到的一些问题,第一时间想到的就是去优快云上面搜一搜,看能不能找到问题的解决方案。三年前小编作为一只刚刚参加工作的程序猿,同样也是如此,每天必到遇到问题,也就导致了每天必到优快云平台上面去找问题的解决方案。后来自己的技能得到慢慢的提升,感觉之前那些看起来很666的技术,好像也没那么的高大上。...
2022-07-22 22:04:28
177
1
原创 TongHttpServer/THS控制台中http虚拟主机的location配置界面无法显示proxy_http_version配置项以及proxy_set_header Connection
按理说配置文件里面有什么就在控制台页面展示什么,但是,其实不是这样的,要不然,刚才的那两行配置配置文件里面有,咋不在控制台展示出来?上面这段代码的意思就是如果配置文件的location配置块中存在proxy_http_version配置的话,那就循环location配置块的每一对键值对,如果发现这个对键值对的值value,包含了Connection字符,就把这个键值对踢出掉。为什么THS控制台源码逻辑要怎么干,我阅读源码,得出的结论是可能为了控制台中处理方式为代理到集群时能够展示长连接选项(可能不对)...
2022-07-19 17:55:27
1861
原创 AQS之hasQueuedPredecessors方法源码分析
AQS之hasQueuedPredecessors方法源码分析 为什么先读取tail,再读取head hasQueuedPredecessors方法false的情况 hasQueuedPredecessors方法true的情况
2022-07-17 16:03:17
701
原创 JUC-CyclicBarrier源码分析
CyclicBarrier可以建立一个循环屏障,这个屏障可以阻塞一个线程直到指定的所有线程都达到屏障。就大巴车等乘客,只有所有的乘客都到了,大巴车才可以出发。它可以实现让一组线程互相等待共同到达某个状态之后再全部同时执行,叫做“循环”是因为CyclicBarrier可以被重复使用。具体用法举例可以参考ReentrantLock用法可以参考AQS的Condition源码可以参考。...............
2022-07-15 23:39:29
226
原创 JUC-AQS的Condition之await和signal源码解析
JUC-AQS原理篇JUC-AQS源码篇我们知道在AQS源码中用lock和unlock可以用来解决并发中的互斥问题。那么AQS的Condition是干啥的呢?Condition主要是用来解决线程之间的同步问题,类似于实现了线程之前的通信。当某个条件满足时,执行某个线程自己的操作。当条件不满足时,调用await方法将当前线程放入到Condition的条件队列中挂起。当这个条件满足了,其他的线程调用signal方法,将挂起的线程从条件队列中转移到同步队列中,让这个线程唤醒。Condition的await方法、s
2022-07-14 00:19:50
1227
原创 JUC-AQS源码篇
上一篇讲了AQS的实现原理这一篇讲讲AQS的的具体源码实现AQS这个抽象类中的代码其实主要就是干了两件事,一个是获取锁,另一个就是释放锁了。获取锁:主要就是调用由AQS子类来实现的能不能获取到锁的方法,如果获取到了,则当前线程接着执行它后面的代码,如果获取失败了,则就将当前线程放入到同步队列中阻塞住,等待其他的释放锁的线程来把它唤醒。获取锁的大致方法调用链如下:共享锁:排他锁(独占锁):上面的acquireShared(arg)方法和acquire(arg)方法是获取锁的入口代码,由具体AQS的子类
2022-07-12 23:40:28
395
原创 JUC-AQS原理篇
AQS全称是AbstractQueuedSynchronizer,这个抽象类是java并发包java.util.concurrent.locks(JUC)中的核心,它是JUC包下面多个组件的底层实现。比如CountDownLatch,Semaphore,CyclicBarrier,ReentrantLock,ReentrantReadWriteLock,ThreadPoolExecutor等的底层实现都用到了AQS。简单来讲,AQS是一个抽象类,这些组件的共性功能,它实现了,差异化的功能,它提供接口,由具体
2022-07-08 14:56:05
520
原创 JUC-ReentrantReadWriteLock锁基础篇
ReentrantReadWriteLock是一种读写锁,它与ReentrantLock的用法才不多,那么为啥还要有读写锁呢。在业务开发中我们会遇到读写操作,面对读写的数据同步,我们用ReentrantLock锁就可以实现了,但是在实际的读写业务场景中还是读的操作多,写的操作少,那么ReentrantLock锁的效率就会显的很低下。因为无论是读还是写操作,ReentrantLock都要去获取锁。也就是读写互斥,读读也是互斥的。但是我们知道读读互斥其实是不用的,因为我们使用锁的初衷是为了保证数据的同步。读又
2022-06-26 17:37:45
309
原创 JUC-ReentrantLock锁基础篇
ReentrantLock是一种可重入的独占锁(互斥锁)。独占锁: 一个线程获取()了这把锁,其他的线程则不能获取。可重入:指的是线程A获取了这把锁,在线程A释放锁之前,线程A本身可以继续来获取这把锁。比如线程A调了了lock()方法获取了这把锁,在线程A调用unlock()方法之前,线程A本身继续调用lock()方法并不会阻塞住。重入锁的设计目的是为了解决死锁的问题。ReentrantLock常常与Synchronized做对比,它们之间的对比如下:ReentrantLock提供的一些常用的方法有:
2022-06-25 22:09:37
538
原创 JUC-Semaphore基础篇
Semaphore顾名思义叫做信号量,是操作系统中的一个概念。在java并发编程中,Semaphore本质上是一个共享锁的,用来限制多线程对共享资源的并发访问。Semaphore内部维护了一个计数器state,其值代表了可以访问的共享资源的个数。一个线程如果要访问1个(n个)共享资源,需要先去获得1个(n个)信号量,如果信号量的计数器值大于1个(n个),意味着有共享资源可以访问,则使其计数器state值减去1个(n个),再访问共享资源。使用完后,再将其获得的共享资源个数释放。如果计数器值不满足,则此线程进
2022-06-23 16:18:28
364
原创 JUC-CyclicBarrier基础篇
CyclicBarrier顾名思义叫做循环栅栏,它是多个线程之间的同步工具类。它的作用就是会让所有线程都等待完成后才会继续下一步行动。它与JUC另一个多个线程之间的同步工具类CountDownLatch类似,但是功能比CountDownLatch更加强大(它们之间的区别请看JUC-CountDownLatch基础篇)场景举例:比如现在有一个门,门上有5把锁,此时有五个人需要通过这扇门,它们每个人只能打开一把锁,所以执行情况是,来一个人开一把锁,然后等着,直到最后一个人来了打开了最后一把锁。此时5个人才可以
2022-06-23 11:01:47
219
原创 JUC-CountDownLatch基础篇
CountDownLatch是一个同步工具类,表示允许一个或者多个线程来等待其他的线程来完成它们的操作后,才继续执行自己的操作。CountDownLatch的作用其实很简单,其实就是一个或者一组线程在开始自己的操作时,必须先等待其他的线程操作执行完,才可以执行后面的操作。场景举例: 比如现在有一个门,门上有5把锁,一个人想要通过这个门,必须等5把锁全部被打开,才能通过这个门继续干事情(等待线程),此时有5个解锁的人(5个工作线程),他们可以开锁,于是他们分别去开一把锁,开完锁就会接着去干自己的事情了,等到
2022-06-15 11:54:16
343
原创 Thread Context ClassLoader的理解
Thread Context ClassLoader意义就是:当需要在父Classloader中去加载一个只有子Classloader才能加载的类时,将子Classloader放到当前线程中,然后在父Classloader中使用子Classloader来加载这个类。这个就是Thread Context ClassLoader的意义。⼀个线程的默认ContextClassLoader是继承⽗线程的,可以调⽤set重新设置,如果在main线程⾥查看,它就是AppClassLoader。...
2022-04-14 15:58:20
692
转载 图解MySQL的四种事务隔离级别与实现原理
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入转载欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用
2022-03-10 17:49:12
94
转载 Springcloud的eureka集群搭建中region和zone的使用
Springcloud中的region和zone的使用一、背景用户量比较大或者用户地理位置分布范围很广的项目,一般都会有多个机房。这个时候如果上线springCloud服务的话,我们希望一个机房内的服务优先调用同一个机房内的服务,当同一个机房的服务不可用的时候,再去调用其它机房的服务,以达到减少延时的作用。二、概念eureka提供了region和zone两个概念来进行分区,这两个概念均来自于亚马逊的AWS:(1)region:可以简单理解为地理上的分区,比如亚洲地区,或者华北地区,再或者北京等等
2021-10-13 10:37:13
686
转载 IDEA命令行缩短器助你解决此问题:Command line is too long. Shorten command line
IDEA命令行缩短器助你解决此问题:Command line is too long. Shorten command line
2021-10-11 09:58:00
250
转载 Spring拓展接口之BeanPostProcessor,我们来看看它的底层实现
Spring拓展接口之BeanPostProcessor,我们来看看它的底层实现Spring 的自动装配 → 骚话 @Autowired 的底层工作原理
2021-10-05 16:18:15
96
原创 java常用的集合类以及它们之间的区别
java的集合接口总共分为两大类: Collection与Map1.Collection 继承自Iterable ,它底下又有两大子接口 Set 和 ListList 的子类常见的有 ArrayList (底层实现是数组),LinkedList (底层实现是链表), Vector(底层实现是数组,线程安全的,方法上加了synchronized)Set的子类常见的有HashSet(底层实现是HashMap) ,TreeSet(底层实现是TreeMap)2.Map的之类常见的有HashTable(底层
2021-08-11 14:40:55
1456
1
原创 spring事务的传播特性
什么是事务的传播特性?A,B两个方法都有事务,在A方法中去调用B方法,此时事务方法应该如何进行处理。比如 A方法里面调用B方法。情况一:A方法出现异常,A方法需要回滚,那么B方法需不需要回滚呢?情况二:B方法出现异常,B方法需要回滚,那么A方法需不需要回滚呢?spring总共给出了7种事务隔离级别:1、PROPAGATION_REQUIRED:默认事务类型,如果没有,就新建一个事务;如果有,就加入当前事务。适合绝大多数情况。解释:方法A中调用方法B,B方法的事务传播设置为PROPAGATION
2021-07-27 14:30:55
2940
3
原创 数据库事务的隔离级别
脏读:(读取了未提交的新事物,然后被回滚了)事务A读取了事务B中尚未提交的数据。如果事务B回滚,则A读取使用了错误的数据。不可重复读:(读取了提交的新事务,指更新操作)不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。幻读:(也是读取了提交的新事务。指增删操作)在事务A多次读取过程中,事务B对数据进行了新增操作,导致事务A多次读取的数据不一致。第一类事物丢失:(称为回滚丢失)对于第一类事物丢失,就是比如A和B同时在
2021-07-27 10:25:02
181
转载 全文搜索引擎Elasticsearch,这篇文章给讲透了
[https://cloud.tencent.com/developer/article/1488535]
2021-07-11 00:00:29
66
转载 withCredentials在跨域发送cookie时的应用
服务A:http://192.168.126.129:5001服务B:http://192.168.126.129:5002或者任意一个请求A时是跨域的地址现在服务A有了它自己的cookie,我们在服务B通过ajax访问服务A或者与A同域的任何一个服务(如http://192.168.126.129:8002,http://192.168.126.129:8003…等)时,是一种跨域访问方式,默认情况下A的cookie是不会随带发的,要想这些服务端(A或者与A同域的服务端)接收到这些cookie,仅仅需
2021-06-21 13:35:39
432
翻译 Linux系统下查找安装包所在目录
1. whichwhich命令查找出相关命令是否已经在搜索路径中,例子如下:$which gcc //显示出GNC的C编译器安装在哪个目录返回结果为:/usr/bin/gcc注意:如果which没有找到要找的命令,可以试试whereis,该命令搜索更大的范围的系统目录。有些系统上的which命令不显示用户没有执行权限的文件。例如$which ipppd/usr/bin/which :no ipppd in (/bin: /usr/bin: /sbin:/usr/sbin)$whereis i
2021-06-20 13:58:55
439
转载 redis篇
1.《进大厂系列》系列-Redis常见面试题(带答案)https://zhuanlan.zhihu.com/p/915396442.《吊打面试官》系列-Redis基础https://juejin.im/post/5db66ed9e51d452a2f15d8333.《吊打面试官》系列-缓存雪崩、击穿、穿透https://juejin.im/post/5dbef8306fb9a0203f6fa3e24.《吊打面试官》系列-Redis哨兵、持久化、主从、手撕LRUhttps://juejin.im/
2021-03-25 10:43:53
100
转载 常见漏洞防御 之 防SQL注入的三种方式
https://alianga.com/articles/2017/03/07/1488852455546.html
2021-03-19 17:44:48
379
转载 offsetTop,offsetLeft offsetWidth offsetHeight offsetParent和scrollLeft ,scrollTop差异
https://www.cnblogs.com/bhlsheji/p/4569824.html
2021-03-17 11:27:19
153
转载 (如何根治HTTP请求响应中的乱码)tomcat中的字符集问题,测试以及总结
https://www.cnblogs.com/callmegaga/p/9640087.html
2021-02-09 11:33:53
244
转载 关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
原文链接:https://www.cnblogs.com/haimishasha/p/6117968.html
2021-01-25 17:53:34
337
转载 tomcat自动(动态)部署和静态部署
web项目在tomcat中的部署分为动态(自动)部署和静态部署两大类。1.动态部署是指可以在tomcat服务器启动之后部署web应用程序而不用重启服务器;2.静态部署是将web项目文件拷贝到tomcat的应用目录(默认是webapps)下。下面就这两种部署方式进行逐一讲解。1、动态部署元素的配置 要开启Web应用的自动部署,需要配置所在的虚拟主机;配置的方式就是前面提到的Host元素的deployOnStartup和autoDeploy属性。如果deployOnStartup或autoDep
2020-12-25 17:32:03
1297
空空如也
IntelliJ IDEA 2022.2.1版本控制台中文乱码
2023-02-20
TA创建的收藏夹 TA关注的收藏夹
TA关注的人