
Java
文章平均质量分 76
忍者算法
公众号:忍者算法
展开
-
一文讲清线程池中的无界阻塞队列问题及解决方案
在并发编程中,线程池是提高系统吞吐量并避免频繁创建销毁线程的常用手段。然而,在使用线程池时,如果选择了。),可能会带来严重的内存管理问题,特别是在远程服务异常或请求处理能力不足时。如果线程池所在机器突然宕机,队列中的任务都会丢失。后台线程监听消息队列,当线程池负载降低时,从队列中取出任务重新执行。在提交任务前,先将任务信息存入数据库,状态标记为。为了解决无界队列导致的内存溢出问题,可以使用。假设一个典型的远程调用服务,使用了。,确保任务在系统恢复后仍然能够执行。如果任务无法被执行,可以。原创 2025-02-24 22:49:26 · 641 阅读 · 0 评论 -
说说线程池的底层工作原理可以吗?
因为每次创建线程都需要分配资源,而销毁线程又会浪费掉创建的开销。因此,我们通常会使用。这样就能提高系统性能,避免因大量线程创建销毁导致的资源浪费!,当任务堆积时,队列会无限增长,可能导致内存溢出(OOM)。,如果任务提交速度远超线程处理速度,可能导致线程数量。使用的是 LinkedBlockingQueue。,避免频繁创建和销毁线程带来的开销。阿里巴巴 Java 开发手册。,在创建线程池时,不要使用。来管理线程,让它们能够。,占用大量系统资源,导致。,明确控制线程池的行为。在 Java 开发中,原创 2025-02-22 01:35:30 · 983 阅读 · 0 评论 -
你对JDK中的AQS理解吗?AQS的实现原理是什么?
(AbstractQueuedSynchronizer)是。假设你和你的朋友在排队买奶茶,窗口一次只能服务一个人。这样,你的 AQS 理解就会非常清晰了!等同步工具的底层框架。原创 2025-02-22 01:21:28 · 453 阅读 · 0 评论 -
ConcurrentHashMap实现线程安全的底层原理到底是什么?
JDK 1.8 进行了优化,不再使用。这样,你的理解应该更加清晰了吧?在 JDK 1.7 及以前,作为底层结构,并且通过。通过哈希计算后映射到了。,并发插入完成,但由于。原创 2025-02-22 01:06:06 · 708 阅读 · 0 评论 -
Arrays.copyOf() 用法
Arrays的copyOf()方法传回的数组是新的数组对象,改变传回数组中的元素值,不会影响原来的数组。copyOf()的第二个自变量指定要建立的新数组长度,如果新数组的长度超过原数组的长度,则保留数组默认值,例如:import java.util.Arrays;public class ArrayDemo { public static void main(String[] args)...转载 2018-12-14 12:21:03 · 86514 阅读 · 12 评论 -
ArrayList扩容机制
ArrayList的主要成员变量:private static final int DEFAULT_CAPACITY = 10;//数组默认初始容量 private static final Object[] EMPTY_ELEMENTDATA = {};//定义一个空的数组实例以供其他需要用到空数组的地方调用 private static final Object[] DEFAUL...原创 2018-12-14 17:10:34 · 524 阅读 · 0 评论 -
JVM Class文件结构
学习Java的朋友应该都知道Java从刚开始的时候就打着平台无关性的旗号,说“一次编写,到处运行”,其实说到无关性,Java平台还有另外一个无关 性那就是语言无关性,要实现语言无关性,那么Java体系中的class的文件结构或者说是字节码就显得相当重要了,其实Java从刚开始的时候就有两套 规范,一个是Java语言规范,另外一个是Java虚拟机规范,Java语言规范只是规定了Java语言相关的约束...转载 2018-12-14 17:25:25 · 277 阅读 · 0 评论