
并发编程
文章平均质量分 95
啥也不剩
<a href="http://zouyh.top/about" target="_blank">http://zouyh.top</a>
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
多线程-线程池
这里重要的地方是第二个if判断,目的是控制线程池的有效线程数量。由上文中的分析可以知道,在执行execute方法时,如果当前线程池的线程数量超过了corePoolSize且小于maximumPoolSize,并且workQueue已满时,则可以增加工作线程,但这时如果超时没有获取到任务,也就是timedOut为true的情况,说明workQueue已经为空了,也就说明了当前线程池中不需要那么多线程来执行任务了,可以把多于corePoolSize数量的线程销毁掉,保持线程数量在corePoolSize即可。原创 2024-02-06 09:43:57 · 885 阅读 · 0 评论 -
多线程-ReentrantReadWriteLock原理
/ 加锁// 解锁// 加锁// 解锁支持方法(乐观读),读取完毕后需要做一次戳校验 如果校验通过,表示这期间确实没有写操作,数据可以安全使用,如果校验没通过,需要重新获取读锁,保证数据安全。if(!lock.validate(stamp)){ // 验戳// 锁升级// 逻辑try {// 锁升级 - 读锁try {sleep(2);测试一: 读-读 可以优化sleep(0.5);结果:可以看到实际没有加读锁。原创 2024-02-05 10:21:50 · 1118 阅读 · 0 评论 -
多线程-ReentrantLock原理解析
AbstractQueuedSynchronizer简称AQS,是一个用于构建锁和同步容器的框架。事实上于包内许多类都是基于AQS构建,例如ReentrantLock,Semaphore,CountDownLatch,ReentrantReadWriteLock,FutureTask等。AQS解决了在实现同步容器时设计的大量细节问题。原创 2024-02-04 09:59:50 · 1778 阅读 · 0 评论 -
多线程-synchronized底层原理
消除锁是虚拟机另外一种锁的优化,这种优化更彻底,Java虚拟机在JIT编译时(可以简单理解为当某段代码即将第一次被执行时 进行编译,又称即时编译),通过对运行上下文的扫描,去除不可能存在共享资源竞争的锁,通过这种方式消除没有必要的锁,可以节省毫无意义的请求锁时间,如下StringBuffer的append是一个同步方法,但是在add方法中的StringBuffer属于一个局部变量,并 且不会被其他线程所使用,因此StringBuffer不可能存在共享资源竞争的情景,JVM会自动将其锁消除。原创 2024-02-02 14:38:33 · 897 阅读 · 0 评论