电话
400 9058 355
News
并发编程常见陷阱包括:共享变量未加锁导致写丢失和脏读;volatile无法解决复合操作原子性;synchronized需共用锁对象;AtomicInteger比synchronized更优;ArrayList加锁仍不安全;ThreadLocal易内存泄漏须显式remove;FixedThreadPool无界队列易OOM...
线程池配置不当是导致Java堆内存OOM的常见原因,尤其当使用无界队列(如newLinkedBlockingQueue())或newCachedThreadPool时,任务积压、对象长期存活引发GC失效。
窗口函数性能差主因是PARTITIONBY和ORDERBY列缺失联合索引;需建INCLUDE覆盖聚合字段的联合索引,控制ROWSBETWEEN范围,确保WHERE下推至分区字段,并避免ORDERBY中函数或隐式转换导致索引失效。
newFixedThreadPool创建固定大小线程池,队列无界易OOM;newCachedThreadPool线程数无上限,高并发易打爆系统;应优先手动构造ThreadPoolExecutor。
优先选CreateBounded(capacity),因其可控内存上限;无界通道易致OOM;有界通道需配置FullMode避免生产者挂起;Consumer必须依赖Complete()才能安全退出awaitforeach。
ExecutorService是线程池的控制接口,非线程池本身;不用newThread()是因后者无法复用、易OOM、难监控和关闭,而ExecutorService提供统一提交、拒绝策略、生命周期管理等能力。
快速发现Java应用响应变慢需先用jstack-l查WAITING/BLOCKED线程及重复锁对象,结合async-profiler录锁事件;GC干扰看GCDetails日志与jstat-gc;ConcurrentHashMap退化源于容量小、hashCode不均或computeIfAbsent耗时;线程池堆积要警惕C...
corePoolSize和maximumPoolSize应依任务类型设定:IO密集型用公式计算,CPU密集型CPU核数;maximumPoolSize仅在有界队列下有效,LinkedBlockingQueue默认无界致其失效;keepAliveTime建议60秒,过短增调度压力,过长占资源;拒绝策略应自定义日志告警而...
邮箱:8955556@qq.com
Q Q:8955556