Java中的线程池类型有哪些

  介绍

本篇文章为大家展示了Java中的线程池类型有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

单个任务处理时间短

将需处理的任务数量大

, # 8226;每次通过新线程()创建对象性能不佳。

, # 8226;线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或伯父。

, # 8226;缺乏更多功能,如定时执行,定期执行,线程中断。

, # 8226;重用存在的线程,减少对象创建,消亡的开销,提升性能。

, # 8226;可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。

, # 8226;提供定时执行,定期执行,单线程,并发数控制等功能。

Java里面线程池的顶级接口是执行者,但是严格意义上讲执行人并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是ExecutorService。下面这张图完整描述了线程池的类体系结构:

癑ava中的线程池类型有哪些"

创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。调用执行将重用以前构造的线程(如果线程可用)。如果现有线程没有可用的,则创建一个新线程并添加到池中。终止并从缓存中移除那些已有60秒钟未被使用的线程,因此,长时间保持空闲的线程池不会使用任何资源。

示例代码:

公共类ThreadPoolExecutorTest {
  公共静态void main (String [] args) {
  ExecutorService cacheThreadPool=Executors.newCachedThreadPool ();
  for (int i=1; i<=5;我+ +){
  最后一个int指数=我;
  尝试{
  thread . sleep (1000);
  }捕捉(InterruptedException e) {
  e.printStackTrace ();
  }
  cacheThreadPool。执行(新Runnable () {
  @Override
  公共空间run () {
  System.out.println(第“;+指数+“个线程“;+ Thread.currentThread () . getname ());
  }
  });
  }
  }
  }//输出结果
  第1个线程pool-1-thread-1
  第2个线程pool-1-thread-1
  第3个线程pool-1-thread-1
  第4个线程pool-1-thread-1第5个线程pool-1-thread-1
  

由结果可看出当执行第二个任务时第一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。

创建一个指定工作线程数量的线程池。每当提交一个任务就创建一个工作线程,如果工作线程数量达到线程池初始的最大的数,则将提交的任务存入到池队列中。

nThreads -池中的线程数

<强>示例代码:

公共类ThreadPoolExecutorTest {
  公共静态void main (String [] args) {
  ExecutorService fixedThreadPool=执行人。newFixedThreadPool (3);
  for (int i=1;i<=5;我+ +){
  最后一个int指数=我;
  fixedThreadPool。执行(新Runnable () {
  @Override
  公共空间run () {
  尝试{
  System.out.println(第“;+指数+“个线程“;+ Thread.currentThread () . getname ());
  thread . sleep (1000);
  }捕捉(InterruptedException e) {
  e .printStackTrace ();
  }
  }
  
  });
  }
  }
  }

由于设置最大线程数为3,所以在输出三个数后等待2秒后才继续输出。

创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。

corePoolSize -池中所保存的线程数,即使线程是空闲的也包括在内。

延迟执行示例代码:

公共类ThreadPoolExecutorTest {
  公共静态void main (String [] args) {
  ScheduledExecutorService scheduledThreadPool=Executors.newScheduledThreadPool (3);
  scheduledThreadPool.schedule (newRunnable () {
  @Override
  公共空间run () {
  System.out.println(“延迟三秒“);
  }
  }3 TimeUnit.SECONDS);
  }
  }

表示延迟3秒执行。

定期执行示例代码:

公共类ThreadPoolExecutorTest {
  公共静态void main (String [] args) {
  
  ScheduledExecutorService scheduledThreadPool=Executors.newScheduledThreadPool (3);
  scheduledThreadPool.scheduleAtFixedRate (newRunnable () {
  @Override
  公共空间run () {
  System.out.println(“延迟1秒后每三秒执行一次“);
  }
  },1,3,TimeUnit.SECONDS);
  }
  
  }

Java中的线程池类型有哪些