首页
学习
活动
专区
圈层
工具
发布

java线程池和并发集合(一)

一、线程池

线程池是一种常见的线程管理方式,它可以复用线程,提高线程的利用率,减少线程的创建和销毁的开销,从而提高程序的性能。Java中提供了ThreadPoolExecutor类来实现线程池。

ThreadPoolExecutor类

ThreadPoolExecutor类是Java中实现线程池的类,它提供了多种构造方法和配置参数,可以根据实际需要创建不同类型的线程池。ThreadPoolExecutor类的主要方法包括:

(1)execute(Runnable command):提交任务到线程池中执行。

(2)shutdown():关闭线程池。

(3)awaitTermination(long timeout, TimeUnit unit):等待所有任务执行完成。

线程池类型

Java中提供了四种线程池类型,分别为:FixedThreadPool、SingleThreadPool、CachedThreadPool和ScheduledThreadPool。

(1)FixedThreadPool:固定大小线程池,创建时需要指定线程池的大小,当线程池中的线程都在执行任务时,新的任务需要等待。示例代码如下:

代码语言:javascript
复制
ExecutorService executor = Executors.newFixedThreadPool(10);
executor.execute(new Runnable() {
    @Override
    public void run() {
        // 任务执行代码
    }
});
executor.shutdown();

(2)SingleThreadPool:单线程线程池,只有一个线程在执行任务,用于需要顺序执行任务的场景。示例代码如下:

代码语言:javascript
复制
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() {
    @Override
    public void run() {
        // 任务执行代码
    }
});
executor.shutdown();

(3)CachedThreadPool:可缓存线程池,线程池的大小会根据需要动态调整,线程池中的空闲线程会在60秒后自动回收。示例代码如下:

代码语言:javascript
复制
javaCopy codeExecutorService executor = Executors.newCachedThreadPool();
executor.execute(new Runnable() {
    @Override
    public void run() {
        // 任务执行代码
    }
});
executor.shutdown();

(4)ScheduledThreadPool:定时执行任务的线程池,可以设置任务的执行时间和执行周期。示例代码如下:

代码语言:javascript
复制
javaCopy codeScheduledExecutorService executor = Executors.newScheduledThreadPool(10);
executor.schedule(new Runnable() {
    @Override
    public void run() {
        // 任务执行代码
    }
}, 1, TimeUnit.SECONDS);
executor.shutdown();

线程池的配置参数

ThreadPoolExecutor类提供了多种配置参数,可以根据实际需要进行设置。其中常用的配置参数包括:

(1)corePoolSize:核心线程池大小。

(2)maximumPoolSize:最大线程池大小。

(3)keepAliveTime:线程池中空闲线程的存活时间。

(4)workQueue:任务队列,用于存储待执行的任务。

(5)threadFactory:线程工厂,用于创建线程。

(6)rejectedExecutionHandler:拒绝策略,用于当任务队列满时拒绝新的任务

下一篇
举报
领券