并发编程
文章平均质量分 82
本专栏详细介绍Java中的多线程高并发相关知识
王军新
互联网农民工~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线程池配置经验总结
当最大线程数超过CPU核心线程数后直接表现就是提高CPU的负载,然后就是线程对内存的占用。没有放之四海皆准的完美配置,最佳参数需要通过监控和调优不断调整。当上下文切换次数超过核心数×10000/秒时性能下降。可以获取k8s限制后的CPU数。突发流量频繁的系统可适当延长。资源紧张的系统可缩短时间。通常设置为60秒左右。原创 2025-05-25 15:26:54 · 460 阅读 · 0 评论 -
CPU飚高处理经验总结
来 输出线程ID 44616 的16进制是 ae48,可以确定导致CPU飙高的原因就是 Thread-0 线程导致。CPU负载(CPU Load)和CPU使用率(CPU Utilization)是衡量系统性能的两个关键指标,它们既有区别又有联系,通常需要结合分析才能全面理解CPU的工作状态。:1/5/15分钟的平均负载(参考值:≤ CPU核心数)。:运行中的进程数(CPU繁忙的直接体现)。:I/O等待时间(高则可能磁盘瓶颈)。:僵尸进程数(若不为0需排查)。:用户态CPU时间(:空闲CPU百分比。原创 2025-05-24 15:15:27 · 402 阅读 · 0 评论 -
volatile关键字详解
volatile 关键字在并发三特性中只有可见性和有序性,所以并不能保证并发的安全,并发安全还是得使用synchronized 关键字来保证。原创 2024-07-16 15:49:08 · 337 阅读 · 0 评论 -
线程池的使用
以下是线程池的构造方法源码,我们依次解释如果当前任务队列待执行任务数量小于核心线程池数量,执行器总是优先创建一个任务线程如果当前任务队列待执行任务数量大于核心线程池数量,执行器总是优先从线程池中取一个空闲线程如果当前任务队列待执行任务数量大于核心线程池数量,且线程池中无空闲任务线程,将会创建一个任务线程,直到超出maximumPoolSize,如果超时maximumPoolSize,则任务将会被拒绝。原创 2024-07-11 15:27:04 · 531 阅读 · 0 评论 -
JUC包中的各种同步器
park(): 阻塞当前线程,直到unpark方法被调用或当前线程被中断,park方法才会返回。parkNanos(long nanos): 同park方法,nanos表示最长阻塞超时时间,超时后park方法将自动返回。单位是纳秒 ,1秒 = 100010001000 纳秒parkUntil(long deadline): 同park()方法,deadline参数表示最长阻塞到某一个时间点,当到达这个时间点,park方法将自动返回。(该时间为从1970年到现在某一个时间点的毫秒数)原创 2024-07-10 18:24:20 · 997 阅读 · 0 评论 -
并发编程之AQS详解
使用了一个int成员变量state来表示同步锁状态,通过内置的FIFO(first-in-first-out)同步队列来控制获取共享资源的线程。内部state 和Node 内部类的属性都被volatile 关键字修饰,在修改state 和 阻塞队列时 都使用CAS机制循环添加,保证并发安全。所以可以说AQS就是利用volatile 和CAS的实现。线程的阻塞方法都是使用的unsafe类进行的。进入到队列后,线程的阻塞和唤醒是使用的。内置的三个修改同步状态的方法。接下来先看下关键源码。原创 2024-07-04 16:38:17 · 296 阅读 · 0 评论 -
并发编程中的Synchronized锁详解
重量级锁对象的实现,采用C++ 编写,在Synchronized 同步的对象的对象头MarkWord中指针指向这个真正的对象。第三部分:填充字符,因为虚拟机要求对象字节必须是8字节的整数倍,填充字符就是用于凑齐这个整数倍的。第二部分:实例变量存储的是对象的属性信息,包括父类的属性信息,按照4字节对齐。Synchronized 的锁存在锁对象的对象头MarkWord中。第一部分:对象头,主要包括。由图中可用得出两个结论。原创 2024-07-04 15:45:43 · 668 阅读 · 0 评论 -
并发编程的三大特性
并发编程三大特性:原子性、可见性、有序性原创 2024-05-21 14:31:52 · 708 阅读 · 1 评论 -
多线程基础
Java中线程基础知识:包括线程的创建、启动、停止、线程调度、线程状态转换的内容原创 2024-05-18 14:31:35 · 430 阅读 · 0 评论
分享