当前位置: 首页 > news >正文

临沂网站建设推广wordpress怎么修改logo尺寸

临沂网站建设推广,wordpress怎么修改logo尺寸,久久理财网,广州公共资源线程池(ThreadPool)是一种通过预先创建和维护一组线程的机制,用来高效管理并发任务。线程池不仅能减少创建和销毁线程的开销,还能更好地控制并发任务的执行。Java 中提供了多种方式来管理线程池,其中包括 ExecutorServ…

线程池(ThreadPool)是一种通过预先创建和维护一组线程的机制,用来高效管理并发任务。线程池不仅能减少创建和销毁线程的开销,还能更好地控制并发任务的执行。Java 中提供了多种方式来管理线程池,其中包括 ExecutorServiceThreadPoolExecutor 等关键类。

一、线程池的基本概念

线程池的核心思想是维护一组可复用的线程来执行任务,而不是为每个任务创建新线程。这样可以避免频繁的线程创建和销毁,提升系统性能。线程池的主要好处包括:

  1. 减少资源消耗:通过复用线程,避免了频繁创建和销毁线程的成本。
  2. 提升响应速度:任务不需要等待新线程的创建,因为线程池中已经有线程可用。
  3. 控制并发数:线程池可以通过限制线程的数量,控制系统中并发任务的数量,防止资源耗尽。
  4. 任务管理:线程池提供了任务队列,可以管理提交的任务,支持任务的调度和优先级。

Java 的 Executor 框架为开发者提供了一种标准化的方式来使用线程池,它将任务的提交与任务的执行分离,使得开发者无需关心底层线程的管理细节。

二、ExecutorService 和 ThreadPoolExecutor 的使用

ExecutorServicejava.util.concurrent 包中的一个接口,提供了一组用于管理线程池的抽象方法。ThreadPoolExecutorExecutorService 接口的一个实现类,提供了线程池的核心功能。

1. 使用 ExecutorService

ExecutorService 是线程池的上层接口,可以通过静态方法 Executors 创建常用的线程池。以下是几种常用的线程池类型:

  • 固定线程池(FixedThreadPool):创建一个固定大小的线程池,线程池中始终有指定数量的线程在运行。新任务提交后,如果线程池中所有线程都在执行任务,则新任务会进入任务队列等待。

    ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
    
  • 缓存线程池(CachedThreadPool):创建一个缓存线程池。线程池的大小不固定,随着需求动态增长。线程闲置时会被回收,适合执行大量短期任务。

    ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
    
  • 单线程池(SingleThreadExecutor):创建一个只有单个线程的线程池,所有任务将在同一个线程中顺序执行。

    ExecutorService singleThreadPool = Executors.newSingleThreadExecutor();
    
  • 调度线程池(ScheduledThreadPool):用于定时或周期性执行任务。

    ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);
    
2. 提交任务

任务可以通过 ExecutorService 提交执行,通常有以下几种方法:

  • execute(Runnable):提交一个 Runnable 任务,执行没有返回结果。

    fixedThreadPool.execute(() -> {System.out.println("Task executed by thread pool");
    });
    
  • submit(Runnable)submit(Callable):提交任务并返回 Future 对象,Future 可用于获取任务执行结果。

    Future<String> future = fixedThreadPool.submit(() -> {return "Task result";
    });
    
3. 关闭线程池

使用完线程池后,应该关闭它以释放资源。可以调用以下方法关闭线程池:

  • shutdown():会等待线程池中的任务执行完毕后再关闭。

    fixedThreadPool.shutdown();
    
  • shutdownNow():立即停止所有任务,并尝试中断正在执行的线程。

    fixedThreadPool.shutdownNow();
    

三、ThreadPoolExecutor 的底层实现原理

ThreadPoolExecutor 是 Java 线程池的核心实现类,它提供了高度可配置的线程池管理机制。我们可以通过构造方法自定义线程池的核心参数,如线程数、队列类型、拒绝策略等。其构造方法如下:

public ThreadPoolExecutor(int corePoolSize,        // 核心线程数int maximumPoolSize,     // 最大线程数long keepAliveTime,      // 非核心线程的存活时间TimeUnit unit,           // 存活时间的单位BlockingQueue<Runnable> workQueue, // 任务队列ThreadFactory threadFactory,       // 线程工厂,用于创建新线程RejectedExecutionHandler handler   // 拒绝策略
)
1. 核心参数介绍
  • corePoolSize:核心线程数,当提交任务时,如果当前线程数小于核心线程数,即使线程池中有空闲线程,也会创建新的线程来执行任务。

  • maximumPoolSize:线程池的最大线程数,当任务队列已满且线程数小于最大线程数时,线程池会创建新线程来执行任务。

  • keepAliveTime:非核心线程的空闲时间超过此时间后将被终止(如果当前线程数大于 corePoolSize)。

  • workQueue:任务队列,用于存放等待执行的任务。常用的任务队列类型有:

    • ArrayBlockingQueue:有界队列,任务达到队列上限时,新的任务将被阻塞或拒绝。
    • LinkedBlockingQueue:无界队列,适合任务量较大的场景。
    • SynchronousQueue:没有容量的队列,提交的任务必须直接交给线程执行,否则会创建新线程。
  • RejectedExecutionHandler:当线程池和任务队列都满时,新的任务将被拒绝。可以选择不同的拒绝策略:

    • AbortPolicy:默认策略,直接抛出 RejectedExecutionException 异常。
    • CallerRunsPolicy:调用执行任务的线程(通常是提交任务的线程)来执行任务。
    • DiscardPolicy:直接丢弃任务,不抛异常。
    • DiscardOldestPolicy:丢弃队列中最旧的任务,然后重新尝试执行当前任务。
2. 工作流程

ThreadPoolExecutor 的工作流程大致可以分为以下几个步骤:

  1. 任务提交:当任务通过 execute()submit() 方法提交时,线程池首先会检查当前线程数是否少于 corePoolSize,如果是,则创建新的线程执行任务。

  2. 任务入队:如果线程数已经达到 corePoolSize,任务会被放入 workQueue 队列中等待执行。

  3. 创建新线程:当队列已满且线程数未达到 maximumPoolSize,线程池会创建新的线程来执行任务。

  4. 拒绝策略:如果线程数已经达到 maximumPoolSize 且队列已满,线程池会根据 RejectedExecutionHandler 策略拒绝新提交的任务。

  5. 任务执行:线程从任务队列中取出任务并执行,任务执行完毕后,线程不会立即销毁,而是保持存活状态,等待下一个任务。如果线程的空闲时间超过 keepAliveTime,并且当前线程数超过 corePoolSize,该线程将被终止。

  6. 线程销毁:当线程池中的所有线程都处于空闲状态且线程数大于 corePoolSize 时,线程池会根据 keepAliveTime 逐步销毁多余的线程,直到只剩下核心线程。

3. 任务队列与线程数的关系

ThreadPoolExecutor 的任务处理策略基于任务队列和线程数的配置,可以分为以下几种情况:

  • 如果当前线程数小于 corePoolSize,则即使队列不满,线程池也会优先创建新线程。
  • 如果队列已满且线程数小于 maximumPoolSize,线程池会继续创建新线程来执行任务。
  • 如果队列已满且线程数已达到 maximumPoolSize,任务将被拒绝,触发拒绝策略。

四、总结

Java 中的 ExecutorServiceThreadPoolExecutor 提供了一种标准化、可扩展的线程池管理机制,可以高效管理并发任务。通过线程池,开发者能够减少线程频繁创建和销毁带来的开销,控制并发数,提升系统性能。

线程池的底层实现主要基于核心线程数、最大线程数、任务队列、存活时间以及拒绝策略等参数的组合。通过合理配置线程池,可以在不同场景下实现性能优化和资源控制。

http://www.yayakq.cn/news/75843/

相关文章:

  • .net做网站用mvc外贸网站建设优化
  • 教育机构做网站的目的网络工程师中级
  • 网站着陆页是什么意思禅城建设网站
  • 做网站用图片算侵犯著作权吗平面设计在线课程
  • 广西南宁建设银行招聘网站wordpress主页登录注册
  • wordpress主页显示浏览数温州 网站优化
  • 深圳团购网站设计哪家好有自己的网站如何做淘宝客
  • 绍兴市交通建设有限公司网站wordpress创业邦
  • 无锡网站维护公司四川城乡住房城乡建设厅网站
  • 网站解析后中国建设人才认证服务平台
  • 建设部信息中心网站最缺工的一百个职业
  • 做一个网站页面多少钱wordpress 首页 矩阵
  • 邵阳做网站局域网建设网站工具
  • 做外贸最好的网站有哪些学校响应式网站模板下载
  • 临海钢结构设计网站网站建设人员分工
  • 河池网站建设服务wordpress积分与奖励
  • 建设公司网站模板下载吉林长春有做网站的吗
  • 科技软件公司网站模板wordpress变慢了
  • 建设银行手机银行银行下载官方网站定制网站建设哪家好
  • 如何获取网站访客qq建设局属于什么单位
  • 分布式网站架构网站建设的什么是网站建设的第一阶段
  • 巴中区建设局网站企业网站留言板
  • 专业南京网站建设电子商务网站建设与管理的背景
  • 做网站的费用记哪个科目wordpress插件授权码
  • 做网站用什么电脑配置wordpress 左图右文
  • 租空间开网站网站建设编写代码问题
  • 做网站漯河wordpress 定时任务 hook
  • 岳阳网站开发报价做设计什么兼职网站建设
  • 博达网站建设一汽大众网站谁做的
  • 服务好的微网站建设网站怎么做支付宝付款