Java知识点学习(第2天)

news/2025/2/14 7:23:47/

为什么不建议使用Executors来创建线程池?

  1. FixedThreadPool
    当我们使用Executors创建FixedThreadPool时,对应的构造方法为:
public static ExecutorService newFixedThreadPool(int nThreads) {return new ThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>Runnable());
}

我们选择的队列为LinkedBlockingQueue,是一个无界阻塞队列,如果任务过多就会不断的添加到队列中,任务越多占用的内存越多,最终可能耗尽内存,导致OOM。

  1. SingleThreadExecutor
    当我们使用Executors创建SingleThreadPool时,对应的构造方法为:
public static ExecutorService newSingleThreadExecutor() {return new FinalizableDelegatedExecutorServcie (new ThreadPoolExecutor(1,1,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>()));
}

和FixedThreadPool一样,也是LinkedBlockingQueue,同样会出现内存耗尽的现象。

总结
除去会导致OOM的问题外,使用Executors创建线程池的方式也不能定义线程的名字,这一点不利于后期排查问题,所以建议使用ThreadPoolExecutor来创建线程池,这样可以灵活控制。

线程池有哪几种状态?每种状态分别表示什么?

  1. RUNNING
    表示线程池正常运行,既能接收新的任务,也会正常吹队列中的任务。
  2. SHUTDOWN
    当调用线程池的shutdown()方法时,线程池会进入SHUTDOWN状态,表示线程处于正在关闭状态,此状态下线程池不会接收新的任务,但是仍会将队列中的任务处理完
  3. STOP
    当调用线程池的shutdownnow()方法时,线程池就进入STOP状态,表示线程池处于正在停止状态,此状态下线程池既不会接收新的任务,也不会处理队列中的任务,并且正在运行的线程也会被中断。
  4. TIDYING
    线程池中没有线程在运行后,线程池的状态会自动变为TIDYING,并且会调用terminated()方法,此方法是空方法,留给程序员后续操作。
  5. TERMINATED
    terminated()方法执行完之后,线程池状态就会变为TERMINATED。

http://www.ppmy.cn/news/41432.html

相关文章

互联网摸鱼日报(2023-04-11)

互联网摸鱼日报&#xff08;2023-04-11&#xff09; InfoQ 热门话题 裁员潮过去、削减中层管理潮又来了&#xff1a;升管理保饭碗&#xff0c;不灵了 微博增值团队可观测性落地实践与回顾-上篇 CVPR 2023&#xff5c;两行代码高效缓解Vision Transformer过拟合&#xff0c;美…

JUnit5学习

以下学习内容基于JUnit5英文文档和中文文档 目录 JUnit 5是什么 注解说明 元注解和组合注解 标准测试类 显示名称(DisplayName) 断言(Assertions) 假设(Assumptions) 条件测试执行(Conditional Test Execution) 标签和过滤(Tagging and Filtering) 测试执行顺序 测试…

JavaScript 进阶 - 0基础第二天

JavaScript 进阶 - 第二天 了解面向对象编程的基础概念及构造函数的作用&#xff0c;体会 JavaScript 一切皆对象的语言特征&#xff0c;掌握常见的对象属性和方法的使用。 深入对象内置构造函数综合案例 深入对象 了解面向对象的基础概念&#xff0c;能够利用构造函数创建对象…

R语言实践——ggplot2+ggrepel绘制散点+优化注释文本位置

简介 书接adjustText实践——调整matplotlib散点图标签&#xff0c;避免重复 上文中&#xff0c;matplotlibadjustText对于我的实例来说并没有起到很好的效果。所以&#xff0c;博主决定在R中利用gglot2ggrepel绘制&#xff0c;期待效果。 操作过程 博主不常使用R&#xff…

三分钟了解什么是时序数据库

在介绍时序数据库之前&#xff0c;我们先来看看什么是时序数据。时序数据就是基于时间排序的数据&#xff0c;再通过时间坐标将这些数据连接起来&#xff0c;形成一个折线图&#xff0c;直观地展示一个指标在过去一段时间内的走势和规律&#xff0c;帮助定位数据异常点。 时序…

Vue自定义指令

一、认识自定义指令 目录 一、认识自定义指令 方式一、使用默认实现方式&#xff0c;使用 ref 实现&#xff0c;并抽取到 hooks&#xff0c;方便调用。 方式二、自定义一个 v-focus 的局部指令 方式三&#xff1a;自定义一个 v-focus 的全局指令 某些情况&#xff0c;你需要…

基于Spring Boot和Vue3的博客平台:用户管理、文章审核与管理、专栏审核与管理、数据统计与分析模块

目录 一、用户管理 1.查询用户列表 2.修改用户信息 二、文章审核与管理 1.查询待审核文章列表 2.审核文章 三、专栏审核与管理 1.查询待审核专栏列表 2.审核专栏 四、数据统计与分析 1.用户注册统计 2.文章发布统计 五、评论管理与审核 1.查询评论列表 3.删除评…

【随笔记】Win11、RTX3070、CUDA117的深度学习机器学习环境配置

文章目录一、创建深度学习 Conda 虚拟环境二、安装 Pytorch-Gpu三、安装 PyTorch Geometric四、安装 Sklearn五、Jupyter 配置5.1 将虚拟环境加入内核5.2 插件配置5.3 主题、字体、字号配置假设你已经安装了Anaconda3&#xff08;最新Anaconda3的安装配置及使用教程&#xff08…