![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
多线程学习笔记
多线程学习笔记
H.CF
这个作者很懒,什么都没留下…
展开
-
Java实现监控tomcat线程池
import jodd.util.StringUtil;import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.Scheduled原创 2021-01-04 10:05:45 · 1070 阅读 · 0 评论 -
【烦人的ThreadLocal】ThreadLocal的工作原理和使用场景
ThreadLocal对ThreadLocal的理解ThreadLocal的工作原理ThreadLocal的应用场景ThreadLocal使用DemoThreadLocal构成图对ThreadLocal的理解通常我们创建变量是可以被任何一个线程访问并修改的,如果想要实现每个线程都有自己的专属本地变量就需要使用到ThreadLocal了。ThreadLocal解决了多线程带来的数据资源竞争问题,解决线程数据的隔离问题,这是因为ThreadLocal就是让每个线程绑定自己的值。如果你创建了一个Thread原创 2020-08-12 15:08:40 · 155 阅读 · 0 评论 -
JUC并发工具--CyclicBarrier的使用和原理解析
CyclicBarrier和CountDownLatch一样是一种同步辅助工具CyclicBarrier 它允许一组线程在一个共同的屏障点彼此等待,所有线程到达屏障点后再全部同时执行。固定数量的线程在程序中必须彼此等待的时候,CyclicBarrier非常有用同CountDownLatch不同的是:CyclicBarrier的某个线程运行到某个点上之后,该线程即停止运行,直到所有的线程都到达了这个点,所有线程才重新运行;CountDownLatch则不是,某线程运行到某个点上之后,只是给某个数值-1原创 2020-06-28 17:48:31 · 223 阅读 · 0 评论 -
JUC并发工具--CountDownLatch的使用和原理解析
CountDownLatch 概念CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行CountDownLatch 定义了一个计数器,和一个阻塞队列, 当计数器的值递减为0之前,阻塞队列里面的线程处于挂起状态,当计数器递减到0时会唤醒阻塞队列所有线程,这里的计数器是一个标志,可以表示一个任务一个线程,也可以表示一个倒计时器,CountDownLatch可以解决那些一个或者多个线程在执行之前必须依赖于某些必要的前提业务先执行的场景。CountDownLatch 常用方法说明原创 2020-06-28 16:15:08 · 226 阅读 · 0 评论 -
线程池详解,带你全面了解线程池
线程池的工作原理如果当前的线程个数比核心池个数小,当任务到来,会优先创建一个新的线程并执行任务当已经到达核心池大小,则把任务放入队列,为了资源不被耗尽,队列的最大容量可能也是有上限的如果达到队列上限则考虑继续创建新线程执行任务,如果此刻线程的个数已经到达最大池上限,则考虑把任务丢弃。ThreadPoolExecutor 的实现public ThreadPoolExecutor(int corePoolSize, int maximu原创 2020-06-27 19:08:18 · 170 阅读 · 0 评论 -
多线程下CAS的ABA问题有什么危害
什么是CASCAS 是一个原子操作,包含了三个操作数–内存位置,预期原值和新值。如果内存位置的值和预期原值匹配,那么处理器自动将该位置的值更新为新值,否则不做任何操作JUC下面的包都是基于 CAS 的多线程情况下 CAS 存在的问题ABA问题线程A准备用CAS将变量有1 替换成 2,但是在这之前,线程B将变量的值由1 替换成3,又替换成了1,这时候线程A执行CAS会成功,一般场景下ABA并不会出现什么问题,但是当涉及到引用的时候就会出问题。场景是用链表来实现一个栈,初始化向栈中压入B、A两个元素原创 2020-06-12 18:23:31 · 1449 阅读 · 0 评论 -
ThreadPoolExecutor 初始化各参数的含义
序号 参数 含义 备注 1 corePoolSize 核心线程数量,线程池初始化时设定 corePoolSize 大小和 maximumPoolSize 大小一致的话 线程池中的线程将不会空闲、 keepAliveTime 和 timeUnit 就不会再起作用 2 maximumPoolSize 线程池最大线程数(非核心线程) 核心线程 ...原创 2020-02-10 13:43:15 · 1302 阅读 · 0 评论