iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >javaExecutors工具类的相关方法使用创建
  • 195
分享到

javaExecutors工具类的相关方法使用创建

javaExecutors工具类javaExecutors 2022-11-16 00:11:07 195人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录通过Executors类创建线程池?newCachedThreadPool方法?newFixThreadPool方法?newScheduledThreadPool方法?newSi

通过Executors类创建线程

线程池的创建方式有很多种,可以通过Executors工具类创建多种模式的线程池,Executors工具类位于java.util.concurrent.locks包中,接下来解释其中的方法。

首先将线程池的七个参数标在这里: corePoolSize:表示线程池中核心线程的数量;

maximumPoolSize:表示线程池中最大线程数量;

keepAliveTime:针对救急线程的存活时间的变量,就是当线程数量超过线程池中的核心数量时,如果没有新的任务被提交,那么核心线程外的救急线程就会保持在keepAliveTime变量值之后被销毁,而不是立即销毁;

unit:也是针对救急线程,表示keepAliveTime的核心单位;

workQueue:表示线程池中的阻塞队列,阻塞队列中存储着等待执行的任务;

threadFactory:表示用来创建线程的线程工厂。创建线程池的时候,默认的线程工厂创建的线程具有相同的优先级,可以为线程起一个好名字;

handler:表示线程池的拒绝策略。当线程池中的阻塞队列满了的时候,线程数maximumPoolSize也达到了最大值,如果此时再有任务提交到线程池,线程池就会采取策略来拒绝任务的执行。

?newCachedThreadPool方法

调用Executors工具类的newCachedThreadPool方法可以创建一个可缓存的线程池,核心线程数为0,当线程池中的线程数量超过了运行任务所需要的线程数,那么可以回收空闲的线程,默认每60s回收;同时当任务增加的时候,线程池又可以创建新的线程来处理任务。

    public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }
    public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>(),
                                      threadFactory);
    }

?newFixThreadPool方法

调用Executors工具类的newFixThreadPool方法可以创建一个固定长度大小的线程池,线程池中的线程都是核心线程,也就是创建的线程池中的线程数量是固定的,能够控制线程池的最大并发数。

当向线程池提交任务时,如果线程池中有空闲的线程则会直接执行任务,如果没有空闲线程则会将任务放入阻塞队列中等待,有空闲线程的时候再去执行阻塞队列中的线程。

当线程池达到最大线程数时,线程数量会保持不变,一旦某个线程出现异常,线程池会补充一个线程。提交到线程池的任务过多可能会导致内存溢出。

    public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>(),
                                      threadFactory);
    }

?newScheduledThreadPool方法

调用Executors工具类的newScheduledThreadPool方法可以创建一个可以周期性执行任务的线程池,也能够定时执行任务。

    public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }
    public static ScheduledExecutorService newScheduledThreadPool(
            int corePoolSize, ThreadFactory threadFactory) {
        return new ScheduledThreadPoolExecutor(corePoolSize, threadFactory);
    }

?newSingleThreadExecutor方法

调用Executors工具类的newSingleThreadExecutor方法可以创建只有一个工作线程的线程池,相当于只有一个线程在工作。能够保证任务按照先进先出的顺序,或者优先级顺序执行任务。就像单线程在串行执行任务一样,但是也有些区别,如果这个唯一的线程出现了异常,线程池会创建一个新的线程来代替它。

   public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>(),
                                    threadFactory));
    }

?newSingleThreadScheduledExecutor方法

调用Executors工具类的newSingleThreadScheduledExecutor方法可以创建只有一个工作线程,并且支持定时,周期性执行任务的线程池。

    public static ScheduledExecutorService newSingleThreadScheduledExecutor(ThreadFactory threadFactory) {
        return new DelegatedScheduledExecutorService
            (new ScheduledThreadPoolExecutor(1, threadFactory));
    }

?newWorkStealingPool方法

调用Executors工具类的newSingleThreadExecutor方法可以创建一个具有并行级别的线程池,这是jdk 1.8新增的方法,可以为线程池设置并行级别,通过使用多个队列来减少竞争,需要传递一个并行级别的参数。

    public static ExecutorService newWorkStealingPool(int parallelism) {
        return new ForkJoinPool
            (parallelism,
             ForkJoinPool.defaultForkJoinWorkerThreadFactory,
             null, true);
    }

以上就是java Executors工具类的相关方法使用创建的详细内容,更多关于java Executors工具类的资料请关注编程网其它相关文章!

--结束END--

本文标题: javaExecutors工具类的相关方法使用创建

本文链接: https://www.lsjlt.com/news/172940.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • javaExecutors工具类的相关方法使用创建
    目录通过Executors类创建线程池newCachedThreadPool方法newFixThreadPool方法newScheduledThreadPool方法newSingle...
    99+
    2022-11-16
    java Executors工具类 java Executors
  • 工具类之关于RestTemplateUtil工具类的使用
    目录工具类-RestTemplateUtil工具类代码可直接复制使用RestTemplate配置类和工具类工具类-RestTemplateUtil工具类 代码可直接复制使用 配置Re...
    99+
    2022-11-13
    工具类使用  RestTemplateUtil工具类 RestTemplateUtil的使用
  • Python创建类的方法及成员访问的相关知识总结
    一、创建类的方法与成员访问 1.1 创建实例方法并访问 实例方法是指在类中定义的函数。该函数是一种在类的实例上操作的函数。 同__init__()方法一样,实例方法的第一个参数必...
    99+
    2024-04-02
  • 用于创建 MySQL 的工具
    本文列出了一些用于创建 MySQL 的工具。这是一个重要的列表,它帮助塑造了今天的 MySQl。自由软件基金会他们帮助提供了一个优秀的编译器(gcc),一个优秀的编译器调试器 (gdb) 和 libc 库(从中借用了 strto.c 以使一...
    99+
    2023-10-22
  • Netty分布式高性能工具类recycler的使用及创建
    目录recycler的使用这里看一个示例在Recycler的类的源码中, 我们看到这一段逻辑跟到Stack的构造方法中继续跟重载的构造方法我们再回到Stack的构造方法中前...
    99+
    2024-04-02
  • Java并发工具类Exchanger的相关知识总结
    一、Exchanger的理解 Exchanger 属于java.util.concurrent包; Exchanger 是 JDK 1.5 开始提供的一个用于两个工...
    99+
    2024-04-02
  • charles工具的使用方法
    本篇内容介绍了“charles工具的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. Charles 简介好多人把它叫做抓包工具,...
    99+
    2023-06-02
  • Python创建类并使用的方法是什么
    在Python中创建类并使用的方法如下:1. 使用`class`关键字定义一个类,并指定类的名称。2. 在类中定义类的属性和方法。3...
    99+
    2023-09-27
    Python
  • Java线程创建与Thread类的使用方法
    目录1.线程与Thread类1.1操作系统中的线程与Java线程1.1.1线程与Thread类1.1.2Thread类的构造方法1.1.3启用java线程必会的方法1.2第一个Jav...
    99+
    2024-04-02
  • Map与JavaBean相互转换的工具类怎么使用
    今天小编给大家分享一下Map与JavaBean相互转换的工具类怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用范围...
    99+
    2023-06-29
  • 如何使用VSCode工具创建HTML文件
    本篇内容主要讲解“如何使用VSCode工具创建HTML文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用VSCode工具创建HTML文件”吧! &nb...
    99+
    2024-04-02
  • 使用ChatGPT创建的生产力工具有哪些
    本文小编为大家详细介绍“使用ChatGPT创建的生产力工具有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“使用ChatGPT创建的生产力工具有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。ChatGPT...
    99+
    2023-07-06
  • 分析Java8使用工厂方法supplyAsync创建CompletableFuture
    这篇文章主要介绍“分析Java8使用工厂方法supplyAsync创建CompletableFuture”,在日常操作中,相信很多人在分析Java8使用工厂方法supplyAsync创建CompletableFuture问题上存在疑惑,小编...
    99+
    2023-06-25
  • Java8 使用工厂方法supplyAsync创建CompletableFuture实例
    目录使用工厂方法 supplyAsync创建 CompletableFuture对比对CompletableFuture async的理解目前为止我们已经了解了如何通过编程创建 Co...
    99+
    2024-04-02
  • 使用kubeadm命令行工具创建kubernetes集群
    目录命令行工具通过软件仓库安装二进制文件下载安装ubutu & centos 快速安装创建 kubernetes 集群1,创建 Master2,然后初始化集群网络。3,加入集...
    99+
    2024-04-02
  • Android OTA 相关工具(六) 使用 lpmake 打包生成 super.img
    我在 《Android 动态分区详解(二) 核心模块和相关工具介绍》 介绍过 lpmake 工具,这款工具用于将多个分区镜像打包生成一个 Android 专用的动态分区镜像,一般称为 super.im...
    99+
    2023-10-06
    Android A/B 系统 动态分区 OTA 工具 lpmake Android
  • win10升级工具的使用方法
    想要升级win10系统,但是又没有找到合适的win10升级工具?今天小编就给大家介绍一款好用的win10升级工具——win10升级助手。今天小编将为大家介绍win10升级工具的使用教程,请大家一同观看。1、首先我们要在微软官方网站中下载微软...
    99+
    2023-07-10
  • 正确使用dotnet工具的方法
    正确使用dotnet工具的方法有以下几步:1. 安装dotnet SDK:首先需要在计算机上安装dotnet SDK,可以从dotn...
    99+
    2023-08-16
    dotnet
  • Java中StringJoiner工具的使用方法
    这篇文章将为大家详细讲解有关Java中StringJoiner工具的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。背景在平时的业务开发中,我们可能会遇到字符串列表根据分隔符进行拼接的需求。比如:输...
    99+
    2023-06-15
  • 正确使用dotnet-*工具的方法
    目录安装验证dotnet-dumpcreatedump分析coredump文件相关资料:安装 因为我们现在都是容器化时代了,所以我们可以把这类工具全部制作成基础镜像 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作