java创建线程池的四种方式

xiaoxiao2022-06-12  16

java创建线程池的四种方式

newCacheThreadExecutornewFixedThreadExecutornewScheduledThreadPoolnewSingleThreadExecutor

newCacheThreadExecutor

创建一个可缓存的线程池,线程池的长度超过需要处理,则回收空闲缓存,若线程数不足,则新建线程。

ExecutorService executorService= Executors.newCachedThreadPool(); for(int i=0;i<10;i++){ executorService.execute(new Runnable() { @Override public void run() { for(int i=0;i<10;i++){ Thread.yield(); System.out.println(i); } } }); }

注意:推荐使用newCacheThreadExecutor,但由于没办法限定最大线程数,导致内存溢出,使用时应该注意。

newFixedThreadExecutor

创建定长的线程池,可控制线程的最大并发数,超出的会在队列中等待。

ExecutorService fixedThreadPool=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); for(int i=0;i<10;i++){ final int index=i; fixedThreadPool.execute( new Runnable() { @Override public void run() { for(int i=0;i<10;i++){ Thread.yield(); System.out.println(i); } } } ); }

注意:连接池的大小 最好依据系统资源进行设置。常见的依据:RunTime.getRunTime.availableProcessors()

newScheduledThreadPool

支持创建定长的连接池,来执行延时任务(schedule方法)以及定时任务(scheduleAtFixedRate方法)。

//延迟1秒调用 ScheduledExecutorService scheduledExecutorService=Executors.newScheduledThreadPool(5); scheduledExecutorService.schedule( new Runnable() { @Override public void run() { System.out.println("call"); } },1,TimeUnit.SECONDS ); //延迟1秒,每隔1秒调用 scheduledExecutorService.scheduleAtFixedRate( new Runnable() { @Override public void run() { System.out.println("哈哈"); } },1,1,TimeUnit.SECONDS ); try { Thread.sleep(3000); }catch (Exception e){ } feature.cancel(true);

newSingleThreadExecutor

只会创建一个单线程的线程池,用单个线程来跑,保证所有任务按指定顺序执行。

ExecutorService executorService= Executors.newSingleThreadExecutor(); for(int i=0;i<10;i++){ executorService.execute(new Runnable() { @Override public void run() { for(int i=0;i<10;i++){ Thread.yield(); System.out.println(i); } } }); }
转载请注明原文地址: https://www.6miu.com/read-4932625.html

最新回复(0)