线程池学习

ops/2024/9/23 20:19:13/

一、线程池基础


1、什么是线程池
用一句话来概述就是:线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后再需要执行新的任务时重用这些线程而不是新建线程。

2、为什么使用线程池
使用线程池最大的原因就是可以根据系统的需求和硬件环境灵活的控制线程的数量,且可以对所有线程进行统一的管理和控制,从而提高系统的运行效率,降低系统的运行压力。

3、线程池有哪些优势
降低资源消耗:线程和任务分离,提高线程重用性
控制线程并发数量,降低服务器压力,统一管理所有线程
提高系统响应速度。假如创建线程用的时间为T1,执行任务的时间为T2,销毁线程的时间为T3,那么使用线程池就免去了T1和T3的时间。

二.线程池的创建

线程池的创建有两种,一种是规定线程数量,另一种是不规定,封顶线程数为int类型的极限

1.不规定线程的个数,直接为int的极限

java">//创建线程池ExecutorService pool1= Executors.newCachedThreadPool();//2.提交任务pool1.submit(new MyRunable());pool1.submit(new MyRunable());pool1.submit(new MyRunable());pool1.submit(new MyRunable());pool1.submit(new MyRunable());//销毁线程池pool1.shutdown();

因为我们开启了五个任务,所以线程的个数最多就是5个,然后我们再来尝试一下不规定线程个数的情况

当我们对线程池有了最大线程的规定的时候,线程的最大数量就是3不会因此发生改变 ,因此我们在项目中也可以实现线程池的应用,在服务器中开一个线程池去处理每一次客户的请求

java">ExecutorService pool2=Executors.newFixedThreadPool(3);//2.提交任务pool2.submit(new MyRunable());pool2.submit(new MyRunable());pool2.submit(new MyRunable());pool2.submit(new MyRunable());pool2.submit(new MyRunable());//销毁线程池pool2.shutdown();

 

当你想要线程池能够睡眠一会儿的时候就可以用到这个方法

java">newScheduledThreadPool

创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。

java">ScheduledExecutorService scheduledThreadPool= Executors.newScheduledThreadPool(3); 
scheduledThreadPool.schedule(newRunnable(){ @Override public void run() {System.out.println("延迟三秒");}
}, 3, TimeUnit.SECONDS);
scheduledThreadPool.scheduleAtFixedRate(newRunnable(){ @Override public void run() {System.out.println("延迟 1 秒后每三秒执行一次");}
},1,3,TimeUnit.SECONDS);


http://www.ppmy.cn/ops/11803.html

相关文章

Windows平台下的Oracle 19c补丁升级

Windows平台下的Oracle 19c补丁升级 文章目录 Windows平台下的Oracle 19c补丁升级第一章 概述第二章 安装前备份2.1 软件目录备份2.2 权限备份2.3 备份数据库 第三章 安装前检查3.1 查看数据库版本3.2 升级opatch版本 第四章 安装补丁4.1 设置环境变量4.2 关闭oracle相关服务4.…

第20篇 Vue命令简介

Vue.js 是一个用于构建用户界面的渐进式框架,它允许开发者通过使用命令行工具来创建和管理项目。以下是一些常用的 Vue 命令,这些命令通常在项目的根目录下使用 Vue CLI 运行。 1. **创建新项目**: bash vue create my-project 这将创建一个…

详解Qt中的JSON操作

JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其简洁的结构、易读性以及与多种编程语言的良好兼容性,在现代Web服务、API交互以及数据持久化场景中得到了广泛应用。Qt作为一款功能强大的跨平台应用开发框架&a…

总结批量创建文件夹及文件重命名、移动的方法

一、需求: 1、根据一个文件夹的所有文件夹名称,批量创建另一个文件夹,并重命名新的文件夹 2、根据提供的数据,获取图片名称,并修改为新的文件名称,保存到json文件中 3、根据提供的图片,复制图…

quivr部署

安装supabase https://zcywxy.blog.csdn.net/article/details/137496929 安装nginx并配置反向代理 location /authend {rewrite ^/authend(/.*)$ $1 break; # 去掉 URL 中的 /backendproxy_pass http://localhost:54321; # 将请求转发到本地的 5050 端口proxy_http_version 1.…

大数据平台搭建2024(三)

三:HBase安装 提前上传hbase安装包至虚拟机 1 上传、解压 tar -zxvf hbase-2.0.0-alpha2-bin.tar.gz -C /hadoop2 修改配置文件 在/hadoop/hbase-2.0.0-alpha2-bin/conf文件夹里 vi /hadoop/hbase-2.0.0-alpha2/conf/hbase-env.sh修改hbase-env.sh文件 export…

学习Rust的第11天:模块系统

Rust的模块系统可以使用它来管理不断增长的项目,并跟踪 modules 存储在何处。 Rust的模块系统是将代码组织成逻辑片段的有效工具,因此可以实现代码维护和重用。模块支持分层组织、隐私管理和代码封装。Rust为开发人员提供了多功能和可扩展的方法来管理项…

在ELF 1开发环境中使用Qt Creator进行远程调试

Qt Creator是一款跨平台集成开发环境(IDE),主要适用于支持Qt框架的各类应用程序开发。其内置的远程调试机制使得开发者能够在本地开发环境中对部署在远程设备上的代码进行调试,无需直接对远程设备进行操作。Qt Creator会通过网络连…