线程池的使用及ThreadPoolExecutor的分析(一)

在开发中,频繁的创建和销毁一个线程,是很耗资源的,为此找出了一个可以循环利用已经存在的线程来达到自己的目的,线程池顾名思义,也就是线程池的集合,通过线程池执行的线程任务,可以很有效的去规划线程的使用。
在java中大致有这几种线程池
      newScheduledThreadPool  创建一个定长线程池,支持定时及周期性任务执行。,可以作一个定时器使用。
      newCachedThreadPool       创建一个可缓存线程池,如果线程池长度超过需要的线程数量,可灵活回收空闲线程,若无可回收,则新建线程。
      newSingleThreadExecutor 创建一个单线程化的线程池, 它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行,可以控制线程的执行顺序
      newFixedThreadPool          创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待,当创建的线程池数量为1的时候。也类似于单线程化的线程池,当为1的时候,也可控制线程的执行顺序

二、线程池的使用

1、newScheduledThreadPool 

1 /** 2 * 测试newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。 3 * 一般可做定时器使用 4 */ 5 public static void test_1(){ 6 //参数是线程的数量 7 ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2); 8 /** 9 * 第二个参数,是首次执行该线程的延迟时间,之后失效 10 * 第三个参数是,首次执行完之后,再过该段时间再次执行该线程,具有周期性 11 */ 12 scheduledExecutorService.scheduleAtFixedRate(new Runnable() { 13 14 @Override 15 public void run() { 16 System.out.println(new Date().getSeconds()); 17 18 } 19 }, 10, 3, TimeUnit.SECONDS); 20 21 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzsjz.html