如何理解线程池中的参数设计

如何理解线程池中的参数设计

  • 你的线程池的参数怎么配置?线程数量设置多少合理?
  • 如何确定一个线程池中的人物已经完成了
  • 为什么不建议使用java自带的Executors创建线程池
  • 线程池里面的阻塞队列设置多少合理?

考察:了解你对技术的掌握程度,|对于技术的理解、场景问题

线程池的参数有哪些

  • 核心线程数
    常驻在线程池中的工作线程数量
  • 最大线程数
    表示线程池中最大能容纳的线程数量(扩容)
  • 阻塞队列
    当核心线程跑满的时候,存储任务的容器
  • 等待时间
  • 等待时间单位
  • 拒接策略
    超过线程池能够处理的容量的时候的保护机制
  • 线程工厂

线程池的设计

池化技术->实现了对线程的复用(一个技术的产生背景)

  • 线程数量不可控
  • 线程的频繁创建和销毁带来的开销

ThreadPoolExector(Java实现)

通过生产者-消费者模型来解决线程服用问题(技术方案)
可以把基于阻塞队列的生产者消费者模型放大一下,就是分布式消息队列。
在这里插入图片描述

public class ThreadPoolDemo {static Queue<Runnable> tasks = new LinkedList<>();static class WorkThread implements Runnable {@Overridepublic void run() {while (true) {Runnable task = tasks.poll();if (task != null) {System.out.println("工作线程开始执行:" + Thread.currentThread().getName());task.run();}else {System.out.println("当前没有任务执行:" + Thread.currentThread().getName());synchronized (WorkThread.class){try {WorkThread.class.wait();}catch (Exception e){e.printStackTrace();}}}}}}public static void main(String[] args) {WorkThread workThread = new WorkThread();new Thread(workThread).start();Scanner scanner = new Scanner(System.in);while (true){String s = scanner.nextLine();tasks.add(()->{System.out.println(Thread.currentThread().getName()+"数据定时同步的任务,开始执行" + s);}) ;synchronized (WorkThread.class){WorkThread.class.notify();}}}
}

线程池的价值是什么?

架构思维

java开发,就真的只要会CRUD
职业发展-》架构,技术经理

  • 生产者消费模型(支付,第三方支付,异步发送到第三方支付)
  • 扩容和缩容的思想,工作线程的创建和销毁
  • 阻塞队列
  • 保护策略(拒绝策略),考虑系统的稳定性

Synchronized的锁升级

无锁-》偏向锁-〉轻量级锁-》重量级锁。

  • 什么是偏向锁,什么是轻量级锁,什么是重量级锁。
  • 为什么要设计锁升级?
  • Synchronized是提供了锁的公平性吗?
  • Synchronized锁标记怎么存储的?
  • 重量级锁为什么称为重量级锁?

java5之前,是没有锁升级这个概念的
无锁-》重量级锁
加锁会带来性能开销:

  • 内核指令的调用,涉及到上下文切换
  • 线程阻塞唤醒,涉及到上下文切换‘
    消耗cpu资源,影响程序的执行性能!
    加锁的方式从并行变成了串行。

两个层面的优化

使用层面的优化

控制加锁的位置,也就是锁的范围。

JVM层面的优化

1,编译器的优化,深度编译(锁的膨胀和锁的消除)
2,锁的升级

思考:能不能在让线程阻塞之前,就竞争到锁呢?
轻量级锁(自旋锁)
自旋竞争锁,通过循环尝试获取锁来竞争到锁资源。平衡循环次数
前提是:通过自旋尝试获得锁的代价,要比线程进入到阻塞代价更低

价值

提炼出有价值的架构思维
如何平衡好性能和安全性之间的关系

库存,防止超卖和少卖
ConcurrenthashMap 1.7的版本锁的是Segment,1.8版本锁的是Node节点
Mysql,表锁,行锁,间隙锁,临键锁,MVCC乐观锁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/340843.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s-调度 13

调度器通过 kubernetes 的 watch 机制来发现集群中新创建且尚未被调度到 Node 上的 Pod。调度器会将发现的每一个未调度的 Pod 调度到一个合适的 Node 上来运行。 kube-scheduler 是 Kubernetes 集群的默认调度器&#xff0c;并且是集群控制面的一部分。 如果你真的希望或者有…

printk的使用与理解

文章目录 一、理清printk二、printk的使用三、printk的打印级别1、基本解释2、详细解释3、如何修改console_loglevel、default_message_loglevel、minimum_console_loglevel、default_console_loglevel的值 四、printk的输出地方五、其它 一、理清printk printk如何使用&#…

讲讲关于跨域的问题,什么是跨域?怎么办?

文章目录 什么是跨域如果非同源&#xff0c;共有三种行为受到限浏览器客户端和向服务器跨域请求的判定流程 跨域问题演示参考 以下内容为我结合他人知识进行的自我总结, 如有错误欢迎指出~ 什么是跨域 跨域就是不同的域名下的资源访问&#xff0c;会被浏览器的本地安全策略阻…

【Python学习】Python学习13-日期和时间

目录 【Python学习】Python学习13-日期和时间 前言通过time 获取时间戳时间元组获取当前时间&#xff0c;格式化时间格式化时间转换python中时间日期格式化符号获取日历Time 模块日历&#xff08;Calendar&#xff09;模块其他模块参考 文章所属专区 Python学习 前言 本章节主…

开源知识库工具推荐:低成本搭建知识库

在信息爆炸的时代&#xff0c;企业和个体对知识的存储和管理需求日益增强。开源知识库工具因其开源、免费、高效的特性&#xff0c;成为了众多组织和个人的首选。如果你正在寻找一款优秀的开源知识库工具&#xff0c;本文将为你推荐三款性能优异的产品&#xff0c;感兴趣就往下…

小马识途:十个营销故事 启发营销思路

在营销过程中&#xff0c;优势是相对的&#xff0c;只有凭借着客观的营销环境创造优势才能够取胜市场。在企业营销中&#xff0c;狗猛酒酸的案例比比皆是。接下来&#xff0c;就与小马识途一起来看看十个经典的营销故事吧&#xff01; 一、摩托车公司 有家德国摩托车公司&…

Ubuntu系统中指定端口防火墙状态查询与操作

浏览器访问&#xff1a; 如果遇到如山图所示的情况&#xff0c;既有可能是防火墙的问题。具体解决方案参照如下&#xff1a; 1.指定端口的防火墙状态查询 &#xff08;1&#xff09;查询命令 sudo ufw status | grep 8081/tcp #其中8081为要查询的端口号 如果端口是打开的…

【vue3中状态管理工具pinia的使用】pinia状态一(state)

1、安装 yarn add pinia//或者//npm install pinia2、在main.js中引入store // 引入piniaimport { createPinia } from piniaconst pinia createPinia()// 使用piniaapp.use(pinia)3、创建一个Store 在项目根目录的 src文件夹 —— 创建store文件夹 —— 创建 index.js 文件 …

VTK开发调试环境下载(VTK开发环境一步到位直接开发,无需自己配置编译 VS2017+Qt5.12.10+VTK)

一、无与伦比的优势 直接下载代码就可以调试的VTK代码仓库。 二、资源制作原理 这个资源根据VTK源码 编译出动态库文件 pdb lib dll 文件&#xff08; x64 debug &#xff09; 并将这两者同时放在一个代码仓库里&#xff0c;下载就能用。 三、使用方法&#xff08;vtk-so…

C语言实现简易n子棋小游戏(代码含注解)

利用C语言简单实现一个n子棋小游戏&#xff0c;棋盘大小由自己定义 将源文件分为 执行游戏的测试文件(test.c)和保存游戏运行逻辑的相关函数的文件(game.c) 头文件中声明符号和函数的定义(game.h) 游戏执行主要依靠二维数组实现&#xff0c;电脑走棋采用随机值的方法简易地…

鸿蒙原生应用再添新丁!万达 入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;万达 入局鸿蒙 来自 HarmonyOS 微博1月11日消息&#xff0c;#万达酒店及度假村启动鸿蒙原生应用及元服务开发# 作为具有中国特色的国牌服务酒店标杆之一&#xff0c;万达酒店及度假村Wanda 将带来全新的服务和交互方式&#xff0c;一步获取“…

Vue3 + TS + Element-Plus —— 项目系统中封装表格+搜索表单 十分钟写五个UI不在是问题

前期回顾 纯前端 —— 200行JS代码、实现导出Excel、支持DIY样式&#xff0c;纵横合并-CSDN博客https://blog.csdn.net/m0_57904695/article/details/135537511?spm1001.2014.3001.5501 目录 一、&#x1f6e0;️ newTable.vue 封装Table 二、&#x1f6a9; newForm.vue …