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

做网站广告联盟赚钱dedecms5.7装饰网站模板

做网站广告联盟赚钱,dedecms5.7装饰网站模板,搜狗网页搜索,互联网时代的营销目录 一、线程池1.1 线程池概念1.2 线程池原理1.3 创建线程池的方式1.4 不同特点的线程池1.5 ThreadPoolExecutor[重要]本文的思维导图 最后 一、线程池 1.1 线程池概念 如果有非常多的任务需要非常多的线程来完成,每个线程的工作时间不长,就需要创建很多线程,工作完又立即销毁…

目录

  • 一、线程池
    • 1.1 线程池概念
    • 1.2 线程池原理
    • 1.3 创建线程池的方式
    • 1.4 不同特点的线程池
    • 1.5 ThreadPoolExecutor[重要]
        • 本文的思维导图
    • 最后

一、线程池

1.1 线程池概念

  • 如果有非常多的任务需要非常多的线程来完成,每个线程的工作时间不长,就需要创建很多线程,工作完又立即销毁[线程频繁创建和销毁线程]
  • 频繁创建和销毁线程非常消耗性能,那么线程池,就是可以创建一些线程,放在"池子"中,用的时候去池子取一个线程去使用,使用完再放回去,线程可以重用
  • 线程池,底层其实就是集合队列,里面存储线程对象,用的时候去抽即可,就不要频繁创建线程了

使用线程池的好处是

  • 减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题。
  • 如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存(OOM Out Of Memory)或者“过度切换”的问题
  • –> 以上摘自阿里官方手册

1.2 线程池原理

image-20230301230326324

  • 任务(task)提交(submit/execute)给线程池(threadpool),由线程池分配线程,运行任务,任务结束后,线程重新放入线程池供后续线程使用

1.3 创建线程池的方式

使用线程池创建线程,执行任务

JDK提供了关于创建线程池的方式

  • Executors: 通过该类提供的静态方法来获得不同特点的线程池对象
    • newFixedThreadPool
    • newCachedThreadPool
    • newScheduledThreadPool
    • newSingleThreadExecutor
  • ThreadPoolExecutor: 通过submit(Runnable task) 来提交任务,执行任务

线程池执行任务时,可以采用两种方法:

execute(): 没有返回值,无法判断任务是否执行成功

submit():会返回Future对象,通过该对象判断任务是否执行成功

线程池使用完要关闭时:

shutdown() 关闭线程池

1.4 不同特点的线程池

通过Executors调用以下静态方法获得不同特点的线程池对象

方法类型解释
newFixedThreadPool固定大小线程池池中包含固定数目的线程,空闲线程一直保留。只有核心线程,线程数量固定,任务队列为LinkedBlockingQueue
newCachedThreadPool动态大小的线程池,原则上无上限无核心线程,非核心线程数量无限,执行完闲置60s后回收,任务队列SynchronousQueue
newScheduledThreadPool可以执行定时任务的线程池用于调度执行的固定线程池,执行定时或周期性任务。和弦线程数量固定,非核心线程数量无线,执行完闲置10ms后回收,任务队列为DelayedWorkQueue
newSingleThreadExecutor线程线程池只有一个线程的池,会顺序执行提交的任务,只有一个核心线程,无非核心线程,任务队列为LinkdBlockingQueue
newSingleThread
ScheduledExecutor
单线程定时任务线程池
newWorkStealingPool1.8提供新的方式创建线程池

  • 以上线程池操作在阿里java开发手册中是不建议用的…
说明:Executors 返回的线程池对象的弊端如下:
1)FixedThreadPool 和 SingleThreadPool:
允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。
2)CachedThreadPool 和 ScheduledThreadPool:
允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致 OOM。
-----------------------
OOM 内存溢出,即系统资源耗尽

分别演示不同特点的线程池:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class TestThreadPool {public static void main(String[] args) {}private static void show3() {// 创建一个调度功能的线程池ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(3);// 给线程池提交任务for (int i = 1; i < 11; i++) {threadPool.schedule(new Runnable( ) {@Overridepublic void run() {Thread thread = Thread.currentThread( );System.out.println(thread.getName( ) + "执行任务");}},5, TimeUnit.SECONDS);}threadPool.shutdown( );}private static void show2() {// 缓存线程池(可变大小)ExecutorService threadPool = Executors.newCachedThreadPool( );// 给线程池提交任务for (int i = 1; i < 10001; i++) {threadPool.execute(new Runnable( ) {@Overridepublic void run() {Thread thread = Thread.currentThread( );System.out.println(thread.getName( ) + "执行任务");}});}threadPool.shutdown( );}private static void show1() {// 创建一个固定3个的线程池ExecutorService threadPool = Executors.newFixedThreadPool(3);// 给线程池提交10个任务for (int i = 1; i < 11; i++) {threadPool.execute(new Runnable( ) {@Overridepublic void run() {Thread thread = Thread.currentThread( );System.out.println(thread.getName( ) + "执行任务");}});}// 关闭线程池threadPool.shutdown( );}
}

1.5 ThreadPoolExecutor[重要]

  • ThreadPoolExecutor 很重要,有7个参数
参数名解释备注
int corePoolSize线程池的线程数量(核心线程数)不能小于0
int maximumPoolSize线程池可支持的最大线程数最大数量>=核心线程数
long keepAliveTime指定临时线程的最大存活时间不能小于0
TimeUnit unit指定存活时间的单位(秒,分,时,天)时间单位
BlockingQueue workQueue指定任务队列
ThreadFactory threadFactory指定哪个线程工厂创建线程
RejectedExecutionHandler handler指定线程忙,任务队列满的时候新任务来了怎么办?拒绝策略

举例子: 海底捞吃饭

  1. 核心线程数: 核心服务人员3个
  2. 最大线程数: 允许最多的服务人员数量10, (其中7个临时找的)
  3. 最大存活时间: 临时工不干活时间
  4. 时间单位:
  5. 阻塞队列: 门口的排队的人
  6. 线程工厂: 如何将服务人员(线程)创建来的
  7. 拒绝策略: 再来的任务不再接收直接拒绝(发券下次来,本次不接客…)
    public static void main(String[] args) {ArrayBlockingQueue<Runnable> queue = new ArrayBlockingQueue<>(10);ThreadPoolExecutor pool = new ThreadPoolExecutor(3, // 核心线程数10,// 最大线程数10, // 最大存活时间TimeUnit.SECONDS,// 时间单位queue);// 阻塞队列// 给线程池提交任务for (int i = 1; i < 30; i++) {pool.execute(new Runnable( ) {@Overridepublic void run() {Thread thread = Thread.currentThread( );System.out.println(thread.getName( ) + "执行任务");}});}}

本文的思维导图

在这里插入图片描述


最后

如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍在这里插入图片描述

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

相关文章:

  • 深圳门户网站建设公司网站分析怎么做
  • 手机相册备份网站源码建设一个购物网站
  • asp手机网站统计代码东莞厚街有什么好玩的地方
  • 自贡网站建设烟台企业网站制作公司
  • 成都网站优化方案微信官网下载安装
  • asp做的是系统还是网站wordpress淘宝模板怎么用
  • 南阳做网站优化哪家好企业网站用vps还是虚拟主机
  • 职业中学网站建设wordpress 后台管理界面插件
  • wordpress做物流网站网站建设前期规划方案
  • 对电子商务网站建设的理解建设网站需要几级安全等保
  • 全美网站建设公司分类信息网站系统
  • 网站建设的毕设报告南溪门户网
  • 什么网站可以做电影投资公众号小程序制作
  • 微信网页设计总结网站优化成本
  • 泊头在哪做网站比较好aso排名优化知识
  • 如何在网站上做标注seo网站优化报价
  • asp. net 做网站网站建设合作合同模板
  • 淮安企业网站制作wordpress 路由怎么配
  • 怎么修改收录网站的标题活动网站
  • 做外国网站aso排名
  • 吕梁网站定制网站图片制作
  • 网站内容该怎么做深圳企业建网站公司
  • 花垣做网站asp商品网站源码
  • 关于网站空间常州网站建设智博
  • 什么叫子网站广州网站百度排名推广
  • 如何制作简易 网站境外域名注册
  • 网站开发工具.晴天娃娃seo这个行业怎么样
  • 哪个网站可以做puzzlewordpress月亮
  • 专业做化妆品的网站做app用什么软件
  • 国外素材网站上传视频网站源码