
我用 AI 写代码有段时间了。它写的东西有个共同特征:能跑,单测能过,看着还挺专业。但它偏爱几个写法。这几个写法有个共性。都是教程和博客里最常见的写法,因为训练数据里它们出现得最多。问题就在这儿:教程里的写法为了让人看懂,通常省略了生产环境要考虑的东西。下面这 6 处,是我每次上线前固定要过一遍的。一、线程池用了 ExecutorsAI 写线程池,十次有九次是这么写的:ExecutorServicepool=Executors.newFixedThreadPool(10);// 或者ExecutorServicepool=Executors.newCachedThreadPool();这个写法本身没语法问题。问题在它的内部实现:newFixedThreadPool用的是无界队列(LinkedBlockingQueue,容量Integer.MAX_VALUE)newCachedThreadPool用的是无界线程数(最大Integer.MAX_VALUE)意思是:任务堆积的时候,前者会把任务全塞进队列直到内存撑爆,后者会无限创建线程直到系统崩。改成显式构造:ThreadPoolExecutorpool=newThreadPoolExecutor(10,// 核心线程数20,// 最大线程数60L,TimeUnit.SECONDS,// 空闲存活时间newArrayBlockingQueue(200),// 有界队列newThreadFactoryBuilder().setNameFormat("order-pool-%d").build(),newThreadPoolExecutor.CallerRunsPolicy()// 拒绝策略);