Java中的线程池:FixedThreadPool、CachedThreadPool、ScheduledThreadPool

本文主要介绍Java中的线程池:FixedThreadPool、CachedThreadPool、ScheduledThreadPool。


一、线程池介绍

线程池是一种线程使用模式,它可以用来减少创建线程和销毁线程的次数,提高应用程序的性能。线程池维护着一个线程队列,线程池中的线程可以反复使用,处理完一个任务后,并不会立即销毁线程,而是将其放回线程队列中,等待下一次任务的到来。


二、Java中的线程池

Java中提供了三种线程池:FixedThreadPool、CachedThreadPool、ScheduledThreadPool。


1. FixedThreadPool

FixedThreadPool是一种固定大小的线程池,它创建的线程数是固定的,当线程池中的线程数达到指定大小后,新的任务将等待之前的任务执行完毕后再执行。

使用方式:

ExecutorService executorService = Executors.newFixedThreadPool(5);

2. CachedThreadPool

CachedThreadPool是一种可缓存的线程池,线程池中的线程数不固定,当有新的任务到来时,如果线程池中有空闲的线程,则立即使用该线程执行任务,否则创建一个新的线程处理任务。当线程池中的线程空闲时间超过60秒时,该线程将被销毁。

使用方式:

ExecutorService executorService = Executors.newCachedThreadPool();

3. ScheduledThreadPool

ScheduledThreadPool是一种定时执行任务的线程池,它可以定时执行任务,也可以按照固定的时间间隔执行任务。ScheduledThreadPool创建固定大小的线程池,当任务数超过线程池大小时,会等待线程池中的任务执行完毕后再执行。

使用方式:

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);

三、代码案例

以下是使用FixedThreadPool的代码案例:

ExecutorService executorService = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
    executorService.execute(() -> {
        System.out.println("Thread-" + Thread.currentThread().getName() + " is running.");
    });
}
executorService.shutdown();

以下是使用CachedThreadPool的代码案例:

ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
    executorService.execute(() -> {
        System.out.println("Thread-" + Thread.currentThread().getName() + " is running.");
    });
}
executorService.shutdown();

以下是使用ScheduledThreadPool的代码案例:

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(5);
scheduledExecutorService.schedule(() -> {
    System.out.println("Thread-" + Thread.currentThread().getName() + " is running.");
}, 5, TimeUnit.SECONDS);
scheduledExecutorService.shutdown();

通过本文的学习,相信读者已经对Java中的线程池有了更深入的了解,可以更好地应用线程池来提高应用程序的性能。

猿教程
请先登录后发表评论
  • 最新评论
  • 总共0条评论