iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java如何固定大小的线程池
  • 840
分享到

Java如何固定大小的线程池

2024-04-02 19:04:59 840人浏览 八月长安

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

摘要

1.固定大小的线程池简介 线程池就是在程序启动的时候先建立几个可以使用的线程放在那里,然后等着具体的任务放进去,这个任务基本可以说都是Runnable的实现类,因此它减小了系统每次新

1.固定大小的线程池简介

线程池就是在程序启动的时候先建立几个可以使用的线程放在那里,然后等着具体的任务放进去,这个任务基本可以说都是Runnable的实现类,因此它减小了系统每次新建和销毁线程的开销,但同时增加了维护这些线程的开销,个中取舍看具体情况而定。

固定大小的线程池就是在启动的时候创建了固定个数的线程放在那里等待使用。

2.包装一个线程池对象


public class TaskPool{
    private final ThreadPoolExecutor executor = (ThreadPoolExecutor)Executors.newFixedThreadPool(9); // 创建一个大小为9的固定线程池,可以按照CPU的核数初步判定,如果CPU密集性任务则创建N+1个,如果是io密集型任务则创建2N+1个,其中N即CPU的核数
    protected void shutdown(){
        // do something
        // 这个方法等待线程池中所有已提交任务执行结束,不接收新任务,然后结束
        executor.shutdown(); 
        // 这个强制结束所有任务,然后正在等在的任务列表
        // executor.shutdownNow(); 
    }
    protected void execute(Runnable command){
        // do something
        // 提交任务
        executor.execute(command); 
    }
    public void status(){
        StringBuffer sb = new StringBuffer();
        // 当前正在执行任务的线程数
        sb.append(executor.getActiveCount() + "\n"); 
        // 当前正在等待执行的线程数
        sb.append(executor.getQueue().size() + "\n"); 
        // 返回已经完成的线程数
        sb.append(executor.getCompletedTaskCount() + "\n"); 
        System.out.println(sb.toString());
        // 注:以上方法都是返回一个大概值,因为线程在执行中,这些状态随时都会改变
    }
}       

3.使用线程池


public class Launcher{
    private TaskPool taskPool = new TaskPool();
    public static void main(String[] args){
        // 新建100个任务,Runnable的实现类Task
        Task[] tasks = new Task[100];
        for (int i = 0; i < tasks.length; i++){
            tasks[i] = new Task("Task " + (i+1));
            // 提交到线程池运行
            taskPool.execute(task[i]);
            if ( i % 50 == 0){
                taskPool.status();
        } 
    }
    private static class Task implements Runnable{
        private String name;
        public Task(String name){
            this.name = name;
        }
        public void run(){
            // do something
            System.out.println("我的名字是:" + this.name);
        }
    }
}

Java线程池小拓展

线程池的介绍

1 常用的 池化技术

C3P0

DBCP

2 线程池的衍生

频繁的创建线程对象和多线程之间进行上下文切换,是非常耗时间和资源的所以jdk1.5中提出了线程池技术

3 使用线程池

Exector

4 线程池的创建

创建一个固定大小的线程池 ( 最常用的方法 )


ExecutorService pool = Executors.newFixedThreadPool(2);
Runnable task = new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}
}
};
pool.execute(task);
pool.execute(task);
pool.execute(task);//线程池的带下只有两个 现在这个任务在其等待队列中排队等候

创建可变大小的线程池


ExecutorService pool = Executors.newCachedThreadPool();
Runnable task = new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}
}
};
pool.execute(task);
pool.execute(task);
pool.execute(task);

创建独立任务的线程池


ExecutorService pool = Executors.newSingleThreadExecutor();
Runnable task = new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}
}
};
pool.execute(task);
pool.execute(task);
pool.execute(task);

创建可调度的线程池


ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(2);
Runnable task = new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
}
}
};
threadPool.schedule(task, 2000, TimeUnit.MILLISECONDS);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Java如何固定大小的线程池

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

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

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

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

下载Word文档
猜你喜欢
  • Java如何固定大小的线程池
    1.固定大小的线程池简介 线程池就是在程序启动的时候先建立几个可以使用的线程放在那里,然后等着具体的任务放进去,这个任务基本可以说都是Runnable的实现类,因此它减小了系统每次新...
    99+
    2024-04-02
  • Java中怎么固定线程池大小
    今天就跟大家聊聊有关Java中怎么固定线程池大小,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。固定大小的Java线程池Java线程池代码import java.util.c...
    99+
    2023-06-17
  • Java线程池大小的设置方法实例
    目录Java 中线程池创建的几种方式🐱‍🏍Executors 工厂方法创建👏 new ThreadPoolExe...
    99+
    2024-04-02
  • Java如何自定义线程池中队列
    目录背景问题分析问题解决总结两个队列的UML关系图SynchronousQueue的定义ArrayBlockingQueue的定义分析jdk源码中关于线程池队列的说明背景 业务交互的...
    99+
    2024-04-02
  • Java中线程池自定义如何实现
    这篇“Java中线程池自定义如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中线程池自定义如何实现”文章吧。线...
    99+
    2023-07-05
  • Java线程池如何创建
    本文小编为大家详细介绍“Java线程池如何创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java线程池如何创建”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。线程池的好处可以实现线程的复用,避免重新创建线程和...
    99+
    2023-06-29
  • 如何查看java线程池的线程数量
    要查看Java线程池的线程数量,可以使用`getPoolSize()`方法来获取线程池中当前的线程数量。以下是一个示例代码:```j...
    99+
    2023-08-24
    java
  • 关于python3的ThreadPoolExecutor线程池大小设置
    线程池的理想大小取决于被提交任务的类型以及所部署系统的特性。 线程池应该避免设置的过大或过小,如果线程池过大,大量的线程将在相对很少的CPU和内存资源上发生竞争,这不仅会导致更高的内...
    99+
    2023-05-16
    ThreadPoolExecutor线程池 线程池大小设置
  • Java多线程 自定义线程池详情
    主要介绍: 1.任务队列 2.拒绝策略(抛出异常、直接丢弃、阻塞、临时队列) 3.init( min ) 4.active 5.max ...
    99+
    2024-04-02
  • java线程池如何合理设置最大线程数和核心线程数
    这篇文章将为大家详细讲解有关java线程池如何合理设置最大线程数和核心线程数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。线程池合理设置最大线程数和核心线程数工作中有这样一个场景,需要处理千万级别的数据的...
    99+
    2023-06-22
  • 线程池之newFixedThreadPool定长线程池的实例
    newFixedThreadPool定长线程池的实例 newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newFixedThr...
    99+
    2024-04-02
  • java线程池ThreadPoolExecutor类使用小结
    目录一、workQueue任务队列二、拒绝策略三、ThreadFactory自定义线程创建四、ThreadPoolExecutor扩展五、线程池线程数量在《阿里巴巴java开发手册》...
    99+
    2024-04-02
  • 如何实现java简单的线程池
    这篇文章主要讲解了“如何实现java简单的线程池”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现java简单的线程池”吧!目录拆分实现流程实现方式拒绝策略阻塞队列线程池和工作线程策略模...
    99+
    2023-06-20
  • 【Java】如何优雅的关闭线程池
    文章目录 背景一、线程中断 interrupt二、线程池的关闭 shutdown 方法2.1、第一步:advanceRunState(SHUTDOWN) 把线程池置为 SHUTDOWN2.2、...
    99+
    2023-09-21
    java 开发语言
  • Java中怎么自定义线程池
    本篇文章给大家分享的是有关Java中怎么自定义线程池,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java代码ThreadPoolExecutor  &nb...
    99+
    2023-06-17
  • Java线程池中多余的线程是如何回收的
    最近阅读了JDK线程池ThreadPoolExecutor的源码,对线程池执行任务的流程有了大体了解,实际上这个流程也十分通俗易懂,就不再赘述了,别人写的比我好多了。 不过,我倒是对...
    99+
    2024-04-02
  • Java如何手动创建线程池
    目录如何手动创建线程池构造器队列饱和策略示例源码分析线程池工具类实现线程的三种方式使用ThreadPoolExecutor编写线程池工具类如何手动创建线程池 jdk提供了一个通过Th...
    99+
    2024-04-02
  • Java自定义线程池的实现示例
    目录一、Java语言本身也是多线程,回顾Java创建线程方式如下:二、JDK线程池工具类.三、业界知名自定义线程池扩展使用.一、Java语言本身也是多线程,回顾Java创建线程方式如...
    99+
    2024-04-02
  • 小程序如何固定页面高度
    在小程序中设置固定页面高度的方法进入微信开发者工具,打开小程序项目文件,在项目文件中,查找并打开utlls/app.json文件;app.json文件打开后,在文件中查找到page属性值;最后,在page属性中,调整height的值即可;p...
    99+
    2024-04-02
  • 详解Java如何关闭线程以及线程池
    目录前言1. 关闭线程1.1 volatile关键字1.2 intrrrupt()方法2.关闭线程池2.1 shutdownNow()方法2.2 shutdown()方法前言 这个问...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作