并发编程
文章平均质量分 93
congnai
这个作者很懒,什么都没留下…
展开
-
并发编程-集合
TreeNode中不但包含了红黑树的parent,left,right,red之外,还有维护的prev,以及继承自父类的next。而且在ConcurrentHashMap的有参构造中,虽然可以穿度一个负载因子的参数,但是无法修改他,在有参构造的逻辑里,仅仅是拿着传入的loadFactor计算初始数组的长度。在协助扩容前,有几个判断,主要是判断扩容是否结束,以及协助扩容的线程是否已经达到最大值的这两个判断,这两个判断没有将扩容标识戳做左移操作,就直接与sizeCtl做判断了,这种判断是没有任何意义的。原创 2023-09-03 18:02:25 · 69 阅读 · 0 评论 -
并发编程-锁
先说清楚和JUC的关系以及说和JUC下其他类的关系,然后说内部的核心结构。你可以往你会的地方拐。AQS本质就是JUC包下的一个抽象类,JUC包下的一些并发工具,并发集合,线程池,锁都是基于AQS作为基础类去实现的。AQS里面有一个核心属性和两个核心的结构:volatile修饰的,并且基于CAS修改的state属性。由Node组成的一个双向链表,或者说叫同步队列。由Node组成的一个单向链表,这个是用于实现类似synchronized的wait和notify的结构。原创 2023-08-30 14:18:34 · 88 阅读 · 1 评论 -
并发编程-基础
线程池可以指定好工作线程的个数,别超过限制,超过了,甩你拒绝策略。实现Callable,需要FutureTask做封装,在启动线程时,依然是执行的FutureTask实现Runnable时重写的run方法,在run方法内部,执行的Callable的call方法。1、使用Executors自带的方式构建(不推荐),线程池参数很多,这种自带的,只提供了修改部分参数的功能,无法完整的掌握线程池的细节。因为线程池不区分核心和非核心,里面只判断个数,如果有一个工作线程凉了,那还是3个工作线程,满足参数的哟求。原创 2023-08-29 22:04:20 · 45 阅读 · 1 评论 -
02-并发篇
掌握 Java 线程六种状态掌握 Java 线程状态转换能理解五种状态与六种状态两种说法的区别分别是新建当一个线程对象被创建,但还未调用 start 方法时处于状态此时未与操作系统底层线程关联可运行调用了 start 方法,就会由进入此时与底层线程关联,由操作系统调度执行终结线程内代码已经执行完毕,由进入此时会取消与底层线程关联阻塞当获取锁失败后,由进入 Monitor 的阻塞队列,此时不占用 cpu 时间当持锁线程释放锁时,会按照一定规则唤醒阻塞队列中的线程,唤醒后的线程进入。原创 2023-08-26 11:04:16 · 35 阅读 · 0 评论 -
01-并发编程
单例模式中的懒汉机制中,就存在一个这样的问题。懒汉为了保证线程安全,一般会采用DCL的方式。但是单单用DCL,依然会有几率出现问题。线程可能会拿到初始化一半的对象去操作,极有可能出现NullPointException。(初始化对象三部,开辟空间,初始化内部属性,指针指向引用)在Java编译.java为.class时,会基于JIT做优化,将指令的顺序做调整,从而提升执行效率。在CPU层面,也会对一些执行进行重新排序,从而提升执行效率。这种指令的调整,在一些特殊的操作上,会导致出现问题。原创 2023-04-05 13:06:35 · 144 阅读 · 1 评论