![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java 多线程
文章平均质量分 84
Java 多线程
菜鸟日常
公众号:菜鸟日常
展开
-
Java 线程池参数含义以及常见设定策略
概述概述线程池构造方法中的参数含义、以及常见的设置线程池参数的办法。参数含义ThreadPoolExecutor 总共包含 4 个构造方法,最终调用的是以下方法,参数含义如下:public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, T原创 2021-08-07 17:53:52 · 510 阅读 · 0 评论 -
Java 关键字 Synchronized 与锁优化机制
锁优化锁消除JIT 通过逃逸分析技术,发现 synchronized 锁对象,只有一个线程能加锁锁粗化JIT 发现代码中有偏向锁轻量级锁重量级锁自适应锁原创 2021-07-08 22:34:25 · 143 阅读 · 2 评论 -
AtomicInteger 源码学习
123原创 2021-06-24 22:02:07 · 108 阅读 · 1 评论 -
ConcurrentHashMap源码学习基于JDK1.8
结构与 HashMap 类似,使用数组 + 链表 + 红黑树存储键值对属性字段transient volatile Node<K,V>[] table; // 存放 bin,第一次插入数据时候进行初始化,长度为 2 的倍数private static final int MIN_TRANSFER_STRIDE = 16 // 扩容线程每次最少要迁移16 个 hash 桶,在扩容中,参与的单个线程允许处理的最少 table 桶首节点个数,虽然适当添加线程,会使得整个扩容过程变快,但需要原创 2021-06-08 22:46:49 · 108 阅读 · 3 评论 -
Java 关键字 volatile 的学习
作用被 volatile 修饰的变量保证了不同线程对该变量操作的内存可见性禁止指令重排序可见性Java 内存模型(Java Memory Model) 是 Java 虚拟机定义的一种规范,即每个线程都有自己的工作空间,线程对变量的操作都在线程的工作内存中完成,再同步到主存中,这样可能会导致不同的线程对共享变量的操作,在各自线程工作空间内不一样的问题。而用 volatile 修饰的变量,线程对该变量的修改,会立刻刷新到主存,其它线程读取该变量时,会重新去主存读取新值。有序性CPU原创 2021-06-06 17:45:23 · 98 阅读 · 1 评论 -
AbstractQueuedSynchronizer 源码学习基于 JDK 1.8
概览AbstractQueuedSynchronizer 提供原子式管理同步状态、阻塞和唤醒线程功能以及队列模型的简单框架。使用设计模式——模板方法,子类只需要实现很少几个接口,就可以定一个锁同步类,完成独占锁,共享锁的逻辑。参考美团点评技术团队编写的:从ReentrantLock的实现看AQS的原理及应用 加上自己的理解来加深对 AQS 的理解。ReentrantLock 与 AQS 关联根据源码可知,ReentrantLock 的非公平锁加锁,只用实现 tryAcquire 获取锁的逻辑,就可原创 2021-05-31 18:33:00 · 73 阅读 · 0 评论 -
CountDownLatch 源码学习基于JDK1.8
1. 概况栅栏:多个线程一起等待,直到任务都完成2. 类定义3. 成员变量只有一个成员变量 Sync ,同步逻辑主要由内部类 Sync 实现private final Sync sync;4. 构造方法构造方法直接调用内部类 Sync 的构造方法public CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync =原创 2021-05-27 22:21:06 · 74 阅读 · 2 评论 -
ThreadPoolExecutor 线程池源码分析
总体涉及生命周期参数含义原创 2021-05-26 21:17:15 · 77 阅读 · 0 评论 -
ReentrantLock 源码学习基于 JDK1.8
1. 概况ReentrantLock 是可重入的,也就是说如果当前线程拥有这把锁,进入到下一个加了同样锁的方法中时,不用等待直接获取,只是对象头字段增加了一个标记,标记进入了两次。比 Synchronized 更加灵活,多一个尝试获取锁的办法,和获取锁超时时间2. 类定义public class ReentrantLock implements Lock, java.io.Serializable {}ReentrantLock 实现 Lock 接口,Lock 接口包含包含以下几原创 2021-05-24 20:03:36 · 107 阅读 · 2 评论 -
LinkedBlockingQueue 源码学习
1. 概况FIFO插入时才创建节点2. 类定义继承父类与实现接口与 ArrayBlockingQueue 一样。public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable {}3. 成员变量与 ArrayBlockingQueue 不一样的地方:使用两个 Lock 控制原创 2021-05-20 21:10:01 · 72 阅读 · 0 评论 -
ArrayBlockingQueue 源码学习
基于 JDK 1.8.0ArrayBlockingQueue 是一个先进先出(FIFO)的阻塞队列,底层是数组,队列长度在创建的时候确定不能修改。使用场景:生产者消费者类定义public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.SerializableArrayBlockingQueue 继承于 Abs.原创 2021-05-18 00:14:22 · 103 阅读 · 0 评论 -
BlockingQueue 接口源码学习
java version “1.8.0_221”Java™ SE Runtime Environment (build 1.8.0_221-b11)Java HotSpot™ 64-Bit Server VM (build 25.221-b11, mixed mode)介绍BlockingQueue 是一个接口,并且它还继承了 Queue 接口,在继承 Queue 接口的基础上,增加了一些 阻塞式 的操作。BlockingQueue 中的成员方法有四种形式,分别满足各个场景的需求:.原创 2021-05-16 20:51:41 · 117 阅读 · 0 评论 -
Java Thread 基础学习
基于 极客时间 《Java 并发编程实战》 并发编程中 3 个核心问题:分工、同步、互斥分工:将任务拆解分配给线程。线程池分配线程消费传递过来的任务,Fork/Join 等待线程执行完成同步:协调好线程执行先后顺序,两者能够通信(Semaphore,Monitor,CountDownLatch,CyclicBarrier,Phaser,Exchanger)。信号量控制进入共享区的数量,监视器获取锁互斥:同一时刻只有一个线程访问共享资源,包含 无锁(final,ThreadLocal,CAS,C.原创 2020-08-27 23:38:23 · 223 阅读 · 0 评论