多线程+线程池

普通线程的创建

三种创建方式实例:

多线程本质上是毫无关系的,执行顺序是不可预知的,但是由于callable方式创建的对象有返回值所以主函数在执行的时候,需要等待返回值回来才能继续执行其他线程,所以在这种状态下是有关联的。

并发:多个线程同时操纵同一变量或者方法。

cpu:浪费指的是cpu打空转。而不是没有使用cpu。

计算机每一个核只能处理一个线程

句柄指的是变量,我们可以看出线程非常多,因为线程一直在快速切换(分时操作系统的由来)基准速度是指的单核的速度。

假设用8核模拟16个核,但是由于计算机内部传输的是电压信号,所以同时最多还是只有8个线程,因为电压会相互产生干扰,像腾讯云/阿里云等说的两核8G等等,是默认大家不同时使用的最理想的状态,如果大家同时使用那么效率远远达不到指定的两核8G。

线程的快速切换每次都要做记录,记录上次执行的位置以便于下次继续执行,所以线程在切换的时候会有1ms的时间开销用于上下文切换时就开辟空间记录执行状态,也就是线程切换既消耗内存又消耗cpu,所以切换的越快损耗越多,可能预计60ms执行完的线程由于10次的上下文切换,最终70ms才执行完。

也就是当没有cpu计算浪费的条件下单线程会比多线程快。

单线程执行完一个再执行下一个,而多线程还要处理很多其他的工作。

由于多线程用于数据插入删除是很快的。多线程可以用于网络爬虫提高效率,不用管多线程怎么切换,cpu是自动切换到,我们只需要完成多线程的编写即可。

使用场景:网络爬虫、数据库批量插入。

线程池:是帮助我们创建线程。

一般情况下队列设置为有界队列。

线程池规定的是,只要核心线程数没满,那么就算前面的执行完任务,也是新建新的任务执行,前面的空着打空转(java线程池规定)。

相关推荐
文丑颜不良啊1 分钟前
LeetCode76~100题目解析
java·leetcode
她的男孩4 分钟前
页面已发布用户仍进不去:Forge Admin 门户入口与系统菜单挂载解耦
java·spring boot·低代码
不像程序员的程序媛8 分钟前
mybatisplus insert dto未指定id时会如何
java·开发语言
我命由我1234527 分钟前
5-2.Python 编码进阶 - 字符串进阶(拼接、普通格式化、普通格式化数字精度控制、快速格式化、遍历、常用方法)
java·开发语言·后端·python·学习·java-ee·学习方法
Pniubi8 小时前
HashMap的扩容和树化边界
java·开发语言
Mikko79 小时前
用 Java 复刻了高中时在塞班上玩的「熔岩矿车」:纯 Swing、零依赖、没有一张图片,一个 jar 双击就能玩
java·游戏开发·swing
知了学历孙老师9 小时前
小自考的校考和统考,出题方和难度差在哪
java·大数据·前端
Java爱好狂.9 小时前
Java初学者如何一周速通SpringBoot!
java·spring boot·后端·spring·高并发·架构师·java面试
秋饼10 小时前
LLM API密钥动态轮换实战:Spring Vault + Spring AI + 多Provider路由
java·ai·技术分享·后端开发
福兮说11 小时前
JSON 格式正确,数据就可靠吗?我用一份自编配置检查类型与空值
java·前端·json