java线程池

it2025-08-28  5

java线程池

三大方法

1、单个线程 ExecutorService threadPool = Executors.newSingleThreadExecutor(); 2、可伸缩的 ExecutorService threadPool = Executors.newCachedThreadPool(); 3、创建一个固定大小的线程池 ExecutorService threadPool = Executors.newFixedThreadPool(10); try { for (int i = 0; i < 100; i++) { threadPool.execute(() -> { System.out.println(Thread.currentThread().getName()); }); } } catch (Exception e) { e.printStackTrace(); } finally { **threadPool.shutdown();** }

七大参数

ExecutorService threadPool = new ThreadPoolExecutor( 2,//核心线程池大小 //1、CPU密集型(Runtime.getRuntime().availableProcessors()),计算机是几核,就是几,可以保持CPU的效率最高 //2、IO密集型 最大核心线程池大小 > 判断程序中十分耗IO的线程 一般是耗IO线程的两倍 Runtime.getRuntime().availableProcessors(),//最大核心线程池大小 2,//超时等待时间 TimeUnit.SECONDS,//超时单位 new LinkedBlockingDeque(3),//阻塞队列 Executors.defaultThreadFactory(),//线程工厂,创建线程的,一般不用动 new ThreadPoolExecutor.DiscardPolicy());//拒绝策略1、AbortPolicy 2、CallerRunsPolicy 3、DiscardOldestPolicy 4、DiscardPolicy try { for (int i = 1; i <= 9; i++) { threadPool.execute(() -> { System.out.println(Thread.currentThread().getName()); }); } } catch (Exception e) { e.printStackTrace(); } finally { threadPool.shutdown(); }

四种拒绝策略

AbortPolicy() //队列满了,不处理,抛出异常CallerRunsPolicy()//哪来的回哪里去DiscardOldestPolicy()//队列满了,尝试去和最早的竞争DiscardPolicy()//队列满了,丢掉任务,不会抛出异常
最新回复(0)