电话
400 9058 355
News
newFixedThreadPool在多数可控场景下更安全,因其线程数固定可防暴增;newCachedThreadPool用无界SynchronousQueue,任务突发易致线程无限创建并引发OOM。
同步容器通过对象级synchronized锁导致高竞争、低并发;ConcurrentHashMap读操作无锁、分段/细粒度锁提升性能;putIfAbsent直接插入预计算值,computeIfAbsent按需调用函数生成值。
volatile不能保证原子性,++操作含读-改-写三步,多线程下仍会丢失更新;synchronized锁的是对象而非方法,不同实例无互斥;ThreadLocal不自动清理value易致内存泄漏;Executors.newFixedThreadPool()用无界队列,高负载易OOM。
corePoolSize是新任务提交时立即创建线程的阈值,而非“最小线程数”;当线程数未达corePoolSize时,新任务触发即时线程创建,否则进入队列或按拒绝策略处理。
BlockingCollection适合同步场景,Channel更适合异步流控;前者基于线程阻塞,后者支持async/await、零分配和背压控制,选择取决于阻塞模型而非绝对优劣。
直接newThread()在高并发下易导致OOM和性能崩溃,必须使用显式配置的ThreadPoolExecutor;应避免Executors工具类的无界队列和失控线程数陷阱,选用有界队列、合理拒绝策略与可监控参数。
最稳妥的方式是使用BlockingQueue而非手写wait/notify,因其天然线程安全、阻塞语义明确、边界处理完整;手写易出现唤醒丢失、虚假唤醒、未用while循环检查条件及锁粒度不合理等问题。
BlockingQueue通过阻塞式put/take操作自动协调生产者-消费者线程,避免手动wait/notify;其核心是阻塞语义与原子性,而非队列本身。
邮箱:8955556@qq.com
Q Q:8955556