Java中的多線程編程需要了解核心線程和非核心線程的概念。在Java中,線程分為兩種類型:核心線程和非核心線程。
核心線程是指直接由Thread類或者ThreadPoolExecutor類創建的線程,這些線程通常執行任務隊列中的任務,并且不會被回收。當任務隊列中沒有任務時,核心線程會阻塞,等待新的任務產生。如果創建ThreadPoolExecutor時使用了ThreadPoolExecutor的預初始化機制,核心線程會一直存在,甚至在沒有任務時也不會被回收。
public class CoreThreadDemo { public static void main(String[] args) { ExecutorService executorService = Executors.newFixedThreadPool(5); for (int i = 0; i< 10; i++) { executorService.execute(new Task()); } executorService.shutdown(); } } class Task implements Runnable { @Override public void run() { System.out.println(Thread.currentThread().getName() + ": hello world"); } }
非核心線程也稱為輔助線程,這些線程是在任務隊列中等待任務時動態創建的,當任務隊列滿時,會增加非核心線程來執行任務。當任務完成后,非核心線程會進行回收或者保留一段時間,以備重用。如果非核心線程在指定時間內沒有執行新任務,則會被回收。
public class NonCoreThreadDemo { public static void main(String[] args) { ExecutorService executorService = new ThreadPoolExecutor( 5, 10, 1L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(15), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()); for (int i = 0; i< 20; i++) { executorService.execute(new Task()); } executorService.shutdown(); } }
在實際應用中,根據任務類型和業務需求來合理分配核心線程數和非核心線程數,以達到最優的性能效果。