ThreadPoolTaskExecutor 配置核心/最大線程均為 10 時,任務超載會怎樣?new Thread() 未啟動或未提交池中,是否浪費資源?線程池只管理調用 execute() 或 submit() 提交的 Runnable/Callable 任務。直接 new Thread().start() 創建的線程完全獨立,不受池子控制。
Spring 的 ThreadPoolTaskExecutor 內部委託 ThreadPoolExecutor。當核心線程滿、隊列滿、最大線程也滿時,會觸發 拒絕策略(默認 AbortPolicy 拋出 RejectedExecutionException)。可通過 setRejectedExecutionHandler 自定義策略(如 CallerRunsPolicy 由調用者線程執行、DiscardOldestPolicy 丟棄最舊任務等)。
new Thread() 僅在堆上創建一個 Java 對象,佔用少量堆內存(幾百字節),不會分配操作系統原生線程資源(如棧空間)。若不調用 start(),該對象最終會被 GC 回收,不會造成線程泄漏。