创建一个可缓存的线程池,线程池的长度超过需要处理,则回收空闲缓存,若线程数不足,则新建线程。
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,但由于没办法限定最大线程数,导致内存溢出,使用时应该注意。
创建定长的线程池,可控制线程的最大并发数,超出的会在队列中等待。
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()
支持创建定长的连接池,来执行延时任务(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);只会创建一个单线程的线程池,用单个线程来跑,保证所有任务按指定顺序执行。
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); } } }); }