
并发
文章平均质量分 73
打怪升级中...
这个作者很懒,什么都没留下…
展开
-
并发-两种线程池
ThreadPoolExcutor 和 ForkJoinPool一. 两者的区别: ThreadPoolExcutor 是多个线程共享一个队列。 ForkJoinPool 是分解处理,在汇总结果。每个线程对应一个队列,任务少的线程会去任务重的队列获取任务执行。 二. 线程池的7个参数: 1.coolPoolSize: 核心线程数 2.maxPoolSize: 最大线程池数 3.keepAliveTime: 非核心线程不原创 2020-11-03 00:00:55 · 160 阅读 · 0 评论 -
并发-ThreadLocal、强、软、弱、虚
ThreadLocalThreadLocal 从名字上看,叫线程变量。可以理解为每个线程独有的变量。 1. 看源码我们就会知道,ThreadLocal核心是ThreadLocalMap 容器。 2. 这个容器在set值时是以当前的ThreadLocal为key的,线程之间 的信息都是独享的,保证了线程安全问题。 3. 最重要的一点是Map的这个key被传递给了弱引用。 4. 这里说下弱引用:只要是触发了GC弱引用就会被回收 5. 由于3、4两条,当ThreadLocal 引用 == nul原创 2020-10-27 23:59:39 · 181 阅读 · 0 评论 -
并发-AQS
今天聊下我理解的AQS主要从是什么、数据结构、原理三个点说一下一. 是什么 AQS是JUC.Locks包下的一个抽象类 AbstractQueueSynchronizer 使用的设计模式是TemplateMethod 模板方法又叫钩子函数 (AQS设计方法,具体的实现由子类来实现)二. 数据结构 AQS 是 volitile int state + Queue (是个双向链表) 1. state 的具体含义由它的子类来决定 例如:原创 2020-10-26 23:54:27 · 177 阅读 · 0 评论 -
并发-JUC基础知识总结(一)
JUC的几个类AtomicInteger确保原子性的原理底层 使用unsafe 类实现unsafe 直接操作的是地址值,cup的原语支持,确保了原子性。unsafe运用的是CAS思想compareAndSet(Object var1 , long valueOffset 地址值,int b 更新值){ int var5; do{ //通过地址值获取最新的值 var5 = this.getIntVolatile(var1, valueOffset ) }while(!thi原创 2020-10-24 23:06:25 · 2584 阅读 · 0 评论