5.4 线程池

这篇具有很好参考价值的文章主要介绍了5.4 线程池。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

线程池是一种管理线程的资源,它可以在系统中创建、重用和销毁线程。线程池的主要优点是减少了创建和销毁线程的开销,提高了系统的性能。

Java中的线程池由java.util.concurrent.ExecutorService接口和它的实现类表示。ExecutorService提供了一些用于管理线程池的方法,如submit()execute()shutdown()等。

5.3.1 创建线程池

Java提供了几种创建线程池的方法:

  • Executors.newFixedThreadPool(int nThreads): 创建一个固定大小的线程池,最多可以同时运行nThreads个线程。
  • Executors.newCachedThreadPool(): 创建一个可缓存的线程池,如果线程池的当前大小超过处理需求,则回收空闲的线程;如果需要额外线程,则创建新线程。
  • Executors.newSingleThreadExecutor(): 创建一个只有一个线程的线程池。
  • Executors.newScheduledThreadPool(int corePoolSize): 创建一个可以定时执行任务的线程池。

5.3.2 使用线程池

我们可以使用ExecutorServicesubmit()execute()方法将任务提交给线程池。这些任务通常是实现java.lang.Runnable接口或java.util.concurrent.Callable接口的类的实例。

Runnable接口的任务没有返回值,而Callable接口的任务可以返回一个值。如果任务是Callable实例,我们可以使用submit()方法提交任务,并获得一个java.util.concurrent.Future实例,该实例表示任务的结果。

示例:使用线程池执行任务

import java.util.concurrent.*;

public class ThreadPoolExample {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(5);

        // 使用execute()方法提交Runnable任务
        for (int i = 0; i < 5; i++) {
            executor.execute(new RunnableTask(i));
        }

        // 使用submit()方法提交Callable任务
        Future<Integer> future = executor.submit(new CallableTask());
        try {
            System.out.println("CallableTask的结果: " + future.get());
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        executor.shutdown();
    }
}

class RunnableTask implements Runnable {
    private int taskId;

    public RunnableTask(int taskId) {
        this.taskId = taskId;
    }

    @Override
    public void run() {
        System.out.println("RunnableTask " + taskId + " is running.");
    }
}

class CallableTask implements Callable<Integer> {
    @Override
    public Integer call() {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        return sum;
    }
}

在上述示例中,我们创建了一个固定大小的线程池,并提交了5个Runnable任务和1个Callable任务。我们还使用Future实例获取了Callable任务的结果。

5.3.3 关闭线程池

当我们不再需要线程池时,应该将其关闭。可以使用ExecutorServiceshutdown()方法或shutdownNow()方法关闭线程池。shutdown()方法会等待所有已提交的任务完成,而shutdownNow()方法会尝试立即停止所有正在执行的任务。

小结

在本章节,我们讨论了Java多线程与并发的“5.3 线程池”。我们了解了如何创建线程池、如何使用线程池执行任务以及如何关闭线程池。线程池是Java并发编程中的重要概念,可以帮助我们更有效地管理线程资源,提高程序性能。

请务必多加实践,以便更好地掌握这些知识点。祝你学习顺利!
推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

5.4 线程池文章来源地址https://www.toymoban.com/news/detail-467060.html

到了这里,关于5.4 线程池的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 开源人力资源管理系统OrangeHRM

    什么是 OrangeHRM ? OrangeHRM 是一个全面的人力资源管理( HRM ) 系统,它包含任何企业所需的所有基本功能。该软件旨在支持任何规模的团队,包括初创企业、中小企业以及大型跨国组织。 你也可以去官方的演示站点进行体验 网址:https://opensource-demo.orangehrmlive.com/web/index.php/au

    2024年02月14日
    浏览(55)
  • 开源项目-erp企业资源管理系统(毕设)

    哈喽,大家好,今天给大家带来一个开源项目-erp企业资源管理系统,项目通过ssh+oracle技术实现。 系统主要有基础数据,人事管理,采购管理,销售管理,库存管理,权限管理模块 基础数据有商品类型,商品,供应商,客户,仓库管理功能    

    2024年02月15日
    浏览(60)
  • 基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(一)

    更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H

    2024年01月20日
    浏览(48)
  • 基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(二)

    更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H

    2024年01月25日
    浏览(54)
  • 基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(五)

    更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H

    2024年01月24日
    浏览(52)
  • 基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(三)

    更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H

    2024年01月24日
    浏览(67)
  • 基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(四)

    更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: https://gitee.com/nbacheng/nbcio-boot 前端代码:https://gitee.com/nbacheng/nbcio-vue.git 在线演示(包括H

    2024年01月23日
    浏览(55)
  • SaaS人力资源管理系统的Bug

    答案:23 讲解地址:74-最小生成树问题_哔哩哔哩_bilibili 答案:81 讲解地址:75-最短路径问题_哔哩哔哩_bilibili 真题 讲解地址:76-网络与最大流量问题_哔哩哔哩_bilibili 真题 讲解地址:76-网络与最大流量问题_哔哩哔哩_bilibili 真题 真题 真题 讲解地址:77-线性规划_哔哩哔哩_

    2024年02月09日
    浏览(50)
  • Linux Cgroups进程资源限制管理 之 资源子系统限制/控制、Docker资源隔离与限制原理解读

    Linux cgroups(控制组)最初由Google工程师Paul Menage在2006年提出,并在Linux内核的2.6.24版本中首次引入。自那时以来,cgroups一直是Linux内核的一部分,并在容器化技术等领域中发挥着至关重要的作用。随着时间的推移,cgroups功能不断得到改进和扩展,以满足对资源管理和隔离性能

    2024年02月21日
    浏览(44)
  • 深入剖析 Linux Cgroups 子系统:资源精细管理

    本章主要演示以下 cgroups 下各个 subsystem 的作用。 根据难易程度,依次演示了 pids 、cpu 和 memory 3 个 subsystem 的使用。 注:本文所有操作在 Ubuntu20.04 下进行。 如果你对云原生技术充满好奇,想要深入了解更多相关的文章和资讯,欢迎关注微信公众号。 搜索公众号【 探索云原

    2024年02月02日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包